2016-11-22 69 views
3

当我知道这是我们的(移动应用)客户端,我们可以使用,使用client_idclient_secret和用户的用户名和密码,授权用户密码交付式。OAuth2中密码授权类型(ROPC)的用途是什么?

我想知道使用client_secret发送用户名和密码时没有client_secret的优点是什么?

当我们使用client_secret和某人刚刚反编译Android应用程序并获得client_secret它有什么好处吗?

回答

3

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

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中有说明。正如您在下面的代码片段中所看到的那样,它确实使用了客户机密钥参数,因为它假定这是非保密客户机:

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