【问题标题】:What is the purpose of the password grant type (ROPC) in OAuth2?OAuth2 中密码授予类型 (ROPC) 的用途是什么?
【发布时间】:2018-08-22 20:49:24
【问题描述】:

据我所知,对于我们的客户(移动应用程序),我们可以使用密码授予类型,该类型使用 client_idclient_secret 以及用户的用户名和密码来授权客户。

我想知道使用client_secret 与不使用client_secret 发送用户名和密码相比有什么优势?

当我们使用client_secret 并且有人只是反编译Android 应用程序并获得client_secret 时,首先拥有它有什么好处?

【问题讨论】:

标签: security oauth-2.0 passwords http-post


【解决方案1】:

你有几个问题,让我们一一回答。

OAuth2 中密码授权类型 (ROPC) 的用途是什么?

这种授权类型的主要目标是为存储最终用户的用户名和密码以代表他们访问其他资源的应用程序提供无缝迁移到 OAuth 2.0。存储用户密码是一个很大的禁忌,因此快速迁移是确保开发人员迁移到 OAuth 2.0 的一种好方法。

...使用client_secret 比发送用户名和密码而不发送client_secret 有什么优势?

用户名和密码用于验证最终用户;也就是说,要确保请求来自具有特定身份的用户。 客户端密码,具有类似的用途,用于验证客户端应用程序本身

优点是您可以相信请求是从已知且受信任的客户端发出的。如果要求能够安全地区分多个客户端,则非常有用。

关于在本机应用程序中使用客户端密码,有人可以反编译并获取密码,您认为这毫无价值是正确的,因为您不能信任这种类型的客户端身份验证。

但是,OAuth2 仅要求将客户端密码用于机密客户端,而对于无法安全维护客户端密码的本机应用程序而言,情况并非如此。在这种情况下,您在没有客户端凭据/秘密的情况下执行 ROPC。


example tutorial from Auth0 about how you can perform a ROPC grant type request 说明了这种可能性。正如您在下面的 sn-p 中看到的,它确实使用了客户端机密参数,因为它假定这是一个非机密客户端:

var options = { method: 'POST',
  url: 'https://YOUR_AUTH0_DOMAIN/oauth/token',
  headers: { 'content-type': 'application/json' },
  body: 
   { grant_type: 'password',
     username: 'user@example.com',
     password: 'pwd',
     audience: 'https://someapi.com/api',
     scope: 'read:sample',
     client_id: 'XyD....23S' },
  json: true };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-02
    • 2018-05-26
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    • 2017-10-08
    • 2017-01-14
    相关资源
    最近更新 更多