我有一个问题与OAuth 2的工作方式有关,但由于使用IdentityServer实现OAuth,我认为这是相关的。我无法在任何地方找到答案。
我正在构建一个使用我自己的API的网站和移动应用。我的应用程序的每个用户都有一个用户名和密码,这将使他能够访问应用程序/网站,并通过API访问他的信息。
我不确定处理用户登录流程的正确方法:
- 在网站上,我有自己设计的登录表单。我不想将用户移动到我的auth服务器进行登录,然后让他批准他给出的信息 - 他是我系统上的用户 - 我可以访问所有信息 - 像facebook这样的kida有登录和访问权限信息 - 他们不会问你愿意给他们什么。那真的是隐含的方式吗?
- 在移动应用程序上,我还有一个登录表单,现在我在这里阅读(https://tools.ietf.org/html/draft-ietf-oauth-native-apps-10)OAuth方法是在WebView中登录?看起来Facebook登录不在他们的移动应用程序的WebView中。
- 我首先看到的方法是资源所有者。用户将登录,获取令牌和刷新令牌,并可以开始使用我的API。但是将我的client_id和秘密存储在移动应用程序中?在网站上的javascript文件?感觉不对。我当然可以调用一个API来掩盖那些并成为登录过程的代理......但是......(阅读#4)。
- 将来我想允许第三方开发者访问。为了让他们允许我的系统用户登录,我将使用隐式流程。此外,我计划让这些开发者帐户具有受限制的API访问权限(例如,对API的调用次数将受到计划的限制)。什么阻止那些开发人员在他们的网站上的系统上询问他们帐户的用户名和密码,从我的服务器获取访问令牌和刷新令牌的响应,然后使用我们想要的API,没有限制,并且可以访问整个用户个人资料?
- 让我们说我坚持资源所有者流程,从服务器接收令牌和刷新令牌。我应该在移动设备上存储什么以及如何存储?什么应该存储在浏览器中以及如何?刷新令牌?每次他打开应用程序时都会获得一个带有刷新令牌的新更新令牌?
醇>
修改
只是为了澄清一下,因为我发现很多讲座和文章从API消费者的角度来解释这个过程(即第三方开发者):我是API所有者和auth服务器所有者,我'我是用户帐户的所有者(他们是我服务的用户),我也是我自己的消费者(虽然是网站和移动应用程序),并且将来我想让第三方开发者允许我的用户使用他们的服务帐户登录(有点像Facebook或谷歌)