OpenID Connect - 在这种情况下,id标记是否应该发送到受保护的资源?

问题描述:

假设我有一个本地应用程序需要发送请求的Web API。此API需要通过本机应用程序来验证用户是谁发出这些请求。 OpenID Connect似乎是正确的选择,因为它涉及身份验证而非OAuth授权。OpenID Connect - 在这种情况下,id标记是否应该发送到受保护的资源?

本机应用程序将用户凭证发送给IDP,并获取访问令牌(用于授权)和ID令牌(用于验证)。根据我对OIDC的理解,访问令牌将被发送到API,但id令牌仅用于本地客户端应用程序。这对我来说没有意义,因为它关心的是用户是谁,而不是原生应用。

那么,为什么id标记还没有传递给受保护的资源(aka API)呢?如果您没有将ID标记传递给API,那么什么保证访问标记是安全的并且可以用于对用户进行身份验证?否则,它似乎失去了通过OAuth使用OIDC的好处。

OIDC规范的设计方式是ID令牌总是用于客户端(本机应用程序),而访问令牌用于资源(API)。 ID令牌总是JWT令牌,但访问令牌可以是不同的类型。

访问令牌的目的不是验证,而是授权(委托授权)。如果由于某种原因,资源服务器想要了解用户,可以调用用户信息端点。

安全/令牌交换的有效性可以通过多种方式进行验证:

  • 使用加密/签名与在授权服务器加密/签名的访问令牌用自己的私钥和资源公钥/私钥模式服务器用公钥解密/验证。

  • 使用令牌内省端点验证索赔,令牌等的有效性..

其他属性,如澳元,在验证发出访问令牌AZP帮助。

一些OIDC提供商使用ID_Tokens访问API的 - 这是不同的,以通过OIDC规范

article建议有详细的了解这些情况的解释模型。