与 OIDC 和访问令牌范围混淆

Confusion with OIDC and access token scopes

我正在实施 API 仅供具有特定范围、经典场景的用户访问。但是我很不明白关于访问令牌的一些事情。

访问令牌是 JWT

我认为这很简单,我只是收到 JWT,验证它,读取范围。

但由于访问令牌格式未规范化,因此 JWT 可以包含任何内容。我是否应该假设每次都有示波器?每个 IdP 都将它们放入其中吗?

访问令牌是不透明的(或者 JWT 没有作用域?)

我需要调用 introspect 端点并从中检索数据。

但是RFC7662 section 2.2表示响应中的字面上只有必需的数据是bool active,其余的是可选

这里的“可选”到底是什么意思?

访问令牌不透明且没有内省端点?

我在 Auth0 论坛上找到 this post 解释他们的不透明和 JWT 令牌。

Opaque Access Tokens issued by Auth0 can be used with the /userinfo endpoint to return a user’s profile.

In order to receive a JWT you must include an audience parameter with your token request.

在这种情况下,我看不到任何获取范围的方法,因为它们不支持令牌自省。我在这里错过了什么?


因此,如果我的实施符合每个 OIDC IdP:

还有什么我需要知道/担心的吗?

我认为您不应该以支持所有可能的 IdP 为目标,因为许多库期望并假定令牌使用的是 JWT 格式,如果您的 IdP 使用引用令牌而不是 JWT,则该令牌将无法工作。

例如,对于 ASP.NET Core,用于身份验证的默认 JWT 库仅支持 JWT 令牌。

通常,您构建的 API 只会验证和信任来自一个提供商的令牌,通常是您控制和拥有的提供商(内部或作为服务)。

如果您想支持社交登录,例如用户可以使用 Google 和 FaceBook 登录,那么这是通过您自己的 IdP 安排的,您的 IDP 永远不会直接处理来自这些提供商的令牌。

典型的设置如下所示