OAuth 2.0 中资源所有者密码凭据授予类型的用途是啥?

Posted

技术标签:

【中文标题】OAuth 2.0 中资源所有者密码凭据授予类型的用途是啥?【英文标题】:What is the purpose of Resource Owner Password Credential Grant Type in OAuth 2.0?OAuth 2.0 中资源所有者密码凭据授予类型的用途是什么? 【发布时间】:2017-01-02 13:52:34 【问题描述】:

根据我的previous question的回答

好的,OAuth 2.0 是一种授权协议,但是当您使用 ROPC(资源所有者密码凭据)授予类型时,按照我的理解,您的意思是进行身份验证和授权,不是吗?

OpenID 是否仍然适用于 ROPC?仍然有点混淆 OAuth 2.0 ROPC 和 OpenID

【问题讨论】:

【参考方案1】:

资源所有者密码凭据授权类型确实对用户进行身份验证,但它是一种非典型的 OAuth 2.0 授权类型,仅用于迁移目的,如规范所述:

资源所有者密码凭据授予类型通常用于 遗留或迁移原因。它降低了存储的总体风险 客户的用户名和密码,但并不消除需要 向客户端公开高权限凭据。

这种资助类型的风险高于其他资助类型 因为它维护了这个协议寻求的密码反模式 避免。

OpenID Connect 不禁止授予资源所有者密码凭证(即使 OpenID Connect 规范在 OAuth 2.0 之外没有明确定义它),但它违背了 OpenID Connect 应该是的联合 SSO 协议的主要目的。这是因为它将 RP 锁定在单一身份验证方法中,从而将用户凭据公开给 RP。你里程wrt。不同提供商的支持可能会有所不同。

另请参阅:Does OpenID Connect support the Resource Owner Password Credentials grant?

【讨论】:

【参考方案2】:

在我看来,当我们使用刷新令牌时,资源所有者密码凭证 (ROPC) 的力量得到了适当的利用。

考虑一个用户需要登录的移动应用程序。一旦登录并使用您的 clientId、secret、userid 和密码请求令牌,通常您会获得访问令牌和刷新令牌。访问令牌的有效期通常较短(例如 1 小时),而刷新令牌的有效期则更长(例如 24 小时)。 ClientId 和 Secret 存储在 App 中。 UserId 和 Password 归用户所有,从不存储在任何地方。

当用户在 1 小时后尝试访问应用程序时,他的访问令牌已过期,这意味着在正常情况下,他需要重新登录。 但是我们可以通过交换刷新令牌以及 clientId 和 Secret(不需要 userId 和密码)来获得新的访问令牌(和新的刷新令牌),从而避免再次输入他的 userId 和密码的繁琐任务。新的访问令牌将具有之前访问令牌的所有相同功能。这意味着只要用户至少在 24 小时前处于活动状态,他就不必再次登录。闲置 24 小时后,刷新令牌和访问令牌都会过期,需要登录才能获取新的访问令牌。

【讨论】:

以上是关于OAuth 2.0 中资源所有者密码凭据授予类型的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Oauth 刷新令牌授予类型

如何使用oAuth2“资源所有者凭据授予”IOS APP?

OAuth2 密码授予与 OpenID 连接

HTTP 基本身份验证和 OAuth 2.0 相同吗?

带密码授权的 DotNetOpenAuth OAuth 2.0 授权服务器

.NET Core 3.1 IdentityServer4:使用资源所有者密码凭据授予时获取无效访问令牌