OpenID Connect 是不是支持资源所有者密码凭证授予?

Posted

技术标签:

【中文标题】OpenID Connect 是不是支持资源所有者密码凭证授予?【英文标题】:Does OpenID Connect support the Resource Owner Password Credentials grant?OpenID Connect 是否支持资源所有者密码凭证授予? 【发布时间】:2014-07-25 16:05:48 【问题描述】:

我之前一直使用 OAuth 资源所有者凭据流进行授权。

但是,我现在想考虑使用 openid connect 来进行身份验证和授权,并且想知道 openid connect 是否支持资源所有者凭据流。

【问题讨论】:

【参考方案1】:

是的,OpenID Connect 支持所有 OAuth 2.0 授权类型,包括资源所有者密码凭据授权和客户端凭据授权。

众所周知,授权码授予和隐式授予是典型的三足流程,包括客户端、授权服务器和用户之间的交互。虽然资源所有者密码凭据授予和客户端凭据授予是两条腿的,这意味着客户端使用预授权范围,因此无需与用户交互,无需在典型流程中执行其中一条腿。

这是一个参考:Configuring an OpenID Connect Provider to enable 2-legged OAuth requests

【讨论】:

你知道为什么吗?有其他选择吗? 它是否在响应中返回 ID 令牌?因为在我的情况下它没有。 不,它没有。 顺便说一句,您的网址已失效。说没有找到内容。【参考方案2】:

答案是肯定的。规范中没有明确说明,但 OpenID Connect 支持所有 OAuth 2.0 流程,因为它是 OAuth 2.0 的扩展。

该规范讨论了涉及浏览器重定向的流程,因为它们更常见、更安全且不那么脆弱,因为资源所有者凭据仅支持用户名和密码,并且仅在 OAuth 2 规范中以实现向后兼容性。

在真正的 SSO 系统中,您希望从 OP/IDP 验证用户的方法中抽象出来。涉及浏览器是一种方法。在资源所有者密码凭证流程中,客户端“看到”资源所有者的用户名/密码,这与其他流程不同,这违背了像 OpenID Connect 这样的联合 SSO 协议的主要目的,其中身份验证机制和凭证应该独立于客户端/应用程序。出于这个原因,您不会在 OpenID Connect 中看到太多 ROPC 的使用,但在企业内部用例中可能会有例外。

但是您的里程可能会有所不同。支持特定的 OP/AS 软件和客户端库。

【讨论】:

另一种看待这个问题的方式:在 OpenID Connect 中使用资源所有者密码凭证授权类型在功能上等同于使用 LDAP 绑定 + attr 查询;后者可能更普遍地跨平台支持【参考方案3】:

是的。我有时也在寻找相同问题的答案。根据 OpenId Connect 规范,建议对 OpenId Connect 请求使用authorization codeimplicit 授权类型。但是没有提到不能使用其他授权类型。因此,您可以对 OpenId Connect 身份验证请求使用任何其他授权类型。有一些来自 openid connect 组的邮件,对此进行了讨论。请从here 找到它。如果你的 OAuth2 授权服务器支持它,我想用它就可以了。据我所知,大多数授权服务器都支持它,例如here

【讨论】:

以上是关于OpenID Connect 是不是支持资源所有者密码凭证授予?的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenID Connect 中,是不是可以将 id 令牌而不是访问令牌传递给资源服务器进行授权?

OpenID Connect 提供程序实施

使用 OpenId Connect 进行基于声明的身份验证

AppAuth / OpenID-Connect:使用用户名和密码登录?

Keycloak 及其不同的适配器是不是实现了 Openid Connect Backchannel 注销规范

OpenId Connect 如何保护资源服务器免受客户端模拟?