OAuth 2.0 范围参数与 OAuth 2.0 JWT access_token 范围声明

Posted

技术标签:

【中文标题】OAuth 2.0 范围参数与 OAuth 2.0 JWT access_token 范围声明【英文标题】:OAuth 2.0 Scope parameter vs OAuth 2.0 JWT access_token scope claim 【发布时间】:2017-05-28 14:25:03 【问题描述】:

我正在阅读以下有关授权的文章:

https://auth0.com/docs/quickstart/backend/aspnet-core-webapi/02-authorization

这让我有点困惑。

Auth0 使用范围声明来提及端点操作的授权。

OAuth 2.0 范围参数也用于相同目的,例如Slack 在以下链接中提到了它的范围:

https://api.slack.com/docs/oauth-scopes

他们的用例是什么,我什么时候更喜欢使用作为 OAuth 2.0 access_token 一部分的 JWT 声明范围(在这种情况下 access_token 不是不透明的)而不是 OAuth 2.0 范围参数

【问题讨论】:

【参考方案1】:

OAuth 2.0 范围参数在规范中定义为客户端应用程序请求特定访问权限的一种方式,然后授权服务器会通知确实授予了访问权限。

您提到的两种情况似乎都与此用例非常一致;一种指定您被授予的访问/权限的方法。

最大的区别在于,在一种情况下使用的是按值标记 (JWT),而另一种情况下使用的是按引用标记(不透明)。如果令牌是独立的,就像 JWT 的情况一样,您必须在其中包含信息,并且他们使用的声明是 scope 声明。

总而言之,scope 参数是一种传输您需要的访问权限以及您确实被授予的访问权限的方式。此信息还需要与已发布的访问令牌相关联地存储。如果是 JWT,它很可能会存储在令牌本身中;如果它是一个不透明的令牌,它很可能会存储在服务器端。

【讨论】:

所以你的意思是scope参数和scope claim是一一对应的,scope claim在access_token被创建之后就存在了,scope参数用来请求这些claims,然后要么存入JWT( stateless) access_token 或存储在服务器中以防不透明的访问令牌 我基本同意这种解释;我不会说这是一对一的通信,因为您可能会请求一定数量的范围,但您只会获得您请求的范围的一个子集。除此之外,是的,声明只是跟踪令牌本身授予的范围的方式。

以上是关于OAuth 2.0 范围参数与 OAuth 2.0 JWT access_token 范围声明的主要内容,如果未能解决你的问题,请参考以下文章

无法添加 OAuth 2.0 范围 LinkedIn

无法添加 OAuth 2.0 范围 LinkedIn

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

OAuth 2.0在微服务中:当资源服务器与另一个资源服务器通信时

GTM-OAuth 2.0 多个发布数据参数?

为啥spring-security-oauth oauth 2.0实现中需要scope参数