OAuth2:要使用哪种流量?

时间:2016-03-14 18:23:40

标签: oauth-2.0 authorization

OAuth2中似乎有四个不同的流程,即(link),

  1. 授权代码流程 - 与服务器端应用程序一起使用
  2. 隐式 - 与移动应用程序或Web应用程序一起使用(应用程序 在用户的设备上运行)
  3. 资源所有者密码凭据 - 与受信任的应用程序一起使用 例如服务本身拥有的那些。
  4. 客户端凭据 - 与应用程序API访问一起使用。
  5. 如果我正在开发一个消耗其自身API资源的移动应用程序,即移动应用程序是由开发API的同一团队开发的,那么我应该使用哪四个OAuth流程以及如何使用?

    鉴于我的情况,听起来像选项3是要走的路。如果是这种情况,您会采用以下过程:

    1. 发布存储在ClientId和ClientSecret上的移动应用程序 它(认为应用程序是可信的)。
    2. 要求用户使用基于Cookie的方式登录其帐户 身份验证(立即删除其用户名和密码)。
    3. 缓存其中返回的用户名和密码的哈希值 基于cookie的身份验证的响应。
    4. 使用缓存的用户名和密码以及ClientId和 ClientSecret,用于从令牌请求访问和刷新令牌 OAuth服务器的端点。
    5. 这看起来合情合理吗?如果我在上述思考过程中走上正轨,或者如果我要做出令人难以置信的愚蠢行为并且应该以其他方式做到这一点,那将是一件好事。

2 个答案:

答案 0 :(得分:1)

Resource Owner Password Credentials flow对你的情况没问题。

BTW,移动应用程序很难保密其客户端(RFC 6749, 2.1. Client TypesRFC 6749, 9. Native Applications)。因此,在正常情况下,不应将客户机密钥嵌入移动应用程序中。换句话说,在安全性方面,嵌入客户端秘密几乎毫无意义。

答案 1 :(得分:1)

  

2-隐式 - 与移动应用程序或Web应用程序一起使用(应用程序   在用户的设备上运行)

如果您的应用程序完全在移动设备上运行,那么建议您使用此流程,因为无法保证您的移动应用程序保密其客户端凭据。