Authentication 对于使用我自己的API的移动和网站,使用OAuth的正确方法是什么?
我有一个问题与OAuth 2的工作方式更相关,但由于使用IdentityServer实现OAuth,我认为这是相关的。我到处都找不到答案 我正在建立一个网站和一个使用我自己API的移动应用程序。我的应用程序的每个用户都有一个用户名和密码,这将允许他访问应用程序/网站,并通过API访问他的信息 我不确定处理用户登录流的正确方法:Authentication 对于使用我自己的API的移动和网站,使用OAuth的正确方法是什么?,authentication,oauth,oauth-2.0,identityserver4,Authentication,Oauth,Oauth 2.0,Identityserver4,我有一个问题与OAuth 2的工作方式更相关,但由于使用IdentityServer实现OAuth,我认为这是相关的。我到处都找不到答案 我正在建立一个网站和一个使用我自己API的移动应用程序。我的应用程序的每个用户都有一个用户名和密码,这将允许他访问应用程序/网站,并通过API访问他的信息 我不确定处理用户登录流的正确方法: 在这个网站上,我有自己设计的登录表单。我不想将用户移动到我的授权服务器登录,然后让他批准他提供的信息-他是我系统上的用户-我可以访问所有信息-kida像facebook一
我只是想澄清一下,因为我发现很多讲座和文章从API消费者的角度(即第三方开发者)解释了这个过程:我是API所有者和auth服务器所有者,我是用户帐户的所有者(他们是我服务的用户),我也是我自己的消费者(尽管是网站和移动应用程序),将来,我想让第三方开发者允许我的用户使用他们在我的服务中的帐户登录(有点像Facebook或Google)你说的没错,你不应该在你的应用程序中存储
客户端密码,但我怀疑你能否绕过存储客户端id
。您还可以禁用应用程序的同意屏幕,并构建本机登录视图。如果您不希望用户每次使用您的应用程序时都登录,您需要将access\u令牌
和refresh\u令牌
存储在设备上(可能在数据库中加密)
对于问题4,您可以执行以下操作:
在您的(web)应用程序中嵌入客户端密码
设置哪些主机可以访问IdentityServer上的api
IdentityServer生成一个salt并将其发送到客户端
客户端使用散列(ip地址+会话盐)计算会话秘密
客户端使用session\u secret
和client\u secret
进行API调用
服务器验证hash
和client\u secret
几乎不可能完全阻止某人使用您的API。但是,您应该添加各种速率限制方法,例如限制IP地址、API调用等。但是,没有任何方法可以阻止有人对您的应用程序进行反编译并访问您的客户端id
只需禁用同意请求,然后或针对特定的idp(本地帐户)@Mardoxx,可通过为客户端设置requiresent=false
来完成