OAuth2 中似乎有四个不同的流程,即(link),
- 授权代码流 - 与服务器端应用程序一起使用
- 隐式 - 用于移动应用程序或网络应用程序(应用程序 在用户设备上运行)
- 资源所有者密码凭据 - 与受信任的应用程序一起使用 例如服务本身拥有的那些。
- 客户端凭据 - 用于应用程序 API 访问。
如果我正在开发一个将从其自身的 API 消耗资源的移动应用程序,即移动应用程序是由开发 API 的同一个团队开发的,我应该使用四个 OAuth 流程中的哪一个以及如何使用?
鉴于我的情况,在我看来选项 3 是可行的方法。如果是这种情况,您会采用以下流程吗:
- 发布您的移动应用程序,其中存储了 ClientId 和 ClientSecret 它(认为没问题,因为应用程序是可信的)。
- 要求用户使用基于 cookie 的方式登录他们的帐户 身份验证(立即删除他们的用户名和密码)。
- 缓存他们返回的用户名和密码的散列值 基于 cookie 的身份验证的响应。
- 使用缓存的用户名和密码,以及 ClientId 和 ClientSecret,从 token 中请求访问和刷新 token OAuth 服务器端点。
这看起来合理吗?很高兴知道我在上述思考过程中是否走在正确的轨道上,或者我是否正在做一些非常愚蠢的事情并且应该以其他方式来做这件事。
最佳答案
Resource Owner Password Credentials flow适合你的情况。
顺便说一句,移动应用程序很难对其客户端 secret 保密(RFC 6749, 2.1. Client Types,RFC 6749, 9. Native Applications)。因此,在正常情况下,客户端 secret 不应嵌入到移动应用程序中。换句话说,嵌入客户端 secret 在安全方面几乎没有意义。
关于oauth-2.0 - OAuth2 : Which flow to use?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995156/