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

6
假设我有一个网络API,本地应用程序需要向其发送请求。这个API需要通过本地应用程序验证发出请求的用户身份。OpenID Connect似乎是正确的选择,因为它与OAuth不同,它关于认证而不是授权。
本地应用程序将用户凭据发送到IDP,并收到访问令牌(用于授权)和id令牌(用于认证)。就我对OIDC的理解,在API只会发送访问令牌,但id令牌仅适用于本机客户端应用程序。我觉得这没有道理,因为API关心的是用户的身份,而不是本地应用程序。
那么为什么id令牌不会传递给受保护的资源(即API)呢?如果不将id令牌传递到API,则如何确保访问令牌是安全的,并且可以用于验证用户身份?否则,使用OIDC而不是OAuth似乎就失去了优势。
1个回答

11

OIDC规范的设计使ID令牌始终为客户端(原生应用程序),而访问令牌则用于资源(API)。 ID令牌始终是JWT令牌,但访问令牌可以是不同类型。

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

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

  • 使用公钥/私钥模型的加密/签名,其中授权服务器使用其私钥对访问令牌进行加密/签名,资源服务器使用公钥进行解密/验证。

  • 使用令牌内省端点来验证声明、令牌的有效性等。

像AUD,AZP这样的其他属性有助于验证发布的访问令牌。

一些OIDC提供商使用ID_Token访问API-这与OIDC规范建议的模型不同。

这篇文章详细解释了这些情况。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接