OAuth 2.0 多范围(客户端凭据案例)

Posted

技术标签:

【中文标题】OAuth 2.0 多范围(客户端凭据案例)【英文标题】:OAuth 2.0 multiple scopes (client credentials case) 【发布时间】:2012-10-10 02:56:45 【问题描述】:

在 OAuth 2.0 设置中,假设您有一个应用程序按照“客户端凭据授予”流程执行“访问令牌请求”。换句话说,我们有一个应用程序 A 访问了其他应用程序公开的一些 API;根据 Oauth 2.0 的规定,在这种情况下,“应用程序 A”仅使用其客户端凭据,而不是用户的凭据。

现在,假设应用程序 A 想要访问从两个或多个应用程序公开的 API,假设应用程序 B 和 C(例如:应用程序 A 编排对 B 和 C 的 API 的访问以提供组合服务)。 B 和 C 也在不同的域中,例如 b.com 和 c.com,但 A、B 和 C 共享一个共同的 OAuth 授权服务器。

    A 是否可以请求在其范围内同时具有 b.com 和 c.com 域中的资源的单个访问令牌,以便 A 可以使用相同的令牌访问 B 和 C?

    你如何获得这个?

    如果不可能,是否有管理类似案例的最佳实践?

请注意,我知道 OAuth 2.0 规范允许在请求或发出令牌时指定多个范围,但这里的重点是 B 和 C 位于不同的域中,例如 b.com 和 c.com。

感谢和亲切的问候,

科拉兹

【问题讨论】:

【参考方案1】:
    是的,这当然是可能的。 From the specification:

资源服务器用于验证访问令牌(以及任何错误响应)的方法超出了本规范的范围,但通常涉及资源服务器和授权服务器之间的交互或协调。

所以这完全取决于您的实现和令牌的类型,您只需确保访问令牌是由您的授权服务器颁发的并且仍然有效。拥有不同的域对此没有任何影响。

可能最广泛使用的做法是在您的资源服务器上进行数据库查找,以查看访问令牌是否存储在那里(因此有效)并将该表与您的授权服务器同步(或直接使用相同的数据库 A , B 和 C)。 3. 见 1. ;)

【讨论】:

以上是关于OAuth 2.0 多范围(客户端凭据案例)的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0客户端凭据获取用户ID

如何使用 OAuth 2.0 客户端凭据流和带有 .net 核心的 JWT 证书连接到 Oracle Netsuite

如何保护 Oauth 2.0 客户端 ID 和客户端密码

Oauth 2.0:客户端 ID 和客户端密码暴露,这是一个安全问题吗?

微服务 OAuth 2.0 范围实现

如何在 Azure 逻辑应用中使用 OAuth 2.0 身份验证?