“范围”是标准声明吗?

Posted

技术标签:

【中文标题】“范围”是标准声明吗?【英文标题】:Is "scope" a standard claim? 【发布时间】:2022-01-07 02:48:12 【问题描述】:

OpenID Connect、JWT 或 OAuth 中是否有任何标准的 scope 声明?

在IdentityServer 4 documentation 中,有一个“范围”,它是一个空格分隔的字符串。


  "client_id": "mobile_app",
  "sub": "123",
  "scope": "read write delete"

但是从我的 IdentityServer 4 实例中,我在访问令牌中获得了一个“范围”声明,它是一个字符串数组。


  // ...
  "client_id": "mobile_app",
  "sub": "123",
  "scope": [ "openid", "profile", "email", "offline_access" ],
  "amr": [ "pwd" ]

在OpenID Connect Core 1.0 规范中,我没有看到将“范围”列为声明。 在RFC 7519 JSON Web Token (JWT) 规范中,我没有看到将“范围”列为声明。

【问题讨论】:

【参考方案1】:

大多数提供者都支持 AT+JWT 令牌类型,并指定它应包含范围声明:

JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens

上面写着:

如果授权请求包含范围参数,则 相应颁发的 JWT 访问令牌必须包含一个范围声明 在 [TokenExchange] 的第 4.2 节中定义。

范围声明中的所有单个范围字符串必须有意义 用于 aud 声明中指示的资源。

【讨论】:

【参考方案2】:

scope 声明由Token Exchange RFC 标准化。根据规范,它应该是一个 JSON 字符串,带有空格分隔的范围标记。

“范围”声明的值是一个 JSON 字符串,其中包含与令牌关联的范围的空格分隔列表...

【讨论】:

以上是关于“范围”是标准声明吗?的主要内容,如果未能解决你的问题,请参考以下文章

在for循环声明中初始化变量的范围实际上不仅仅是块范围吗?

C语言中不能在函数里面声明函数吗

我应该将变量声明为尽可能接近它们将被使用的范围吗?

范围和链接有啥区别?

错误:此范围内未声明“NULL”

“IP_TRANSPARENT”未在此范围内声明