OpenID Connect - 在这种情况下是不是应该将 id 令牌发送到受保护的资源?
Posted
技术标签:
【中文标题】OpenID Connect - 在这种情况下是不是应该将 id 令牌发送到受保护的资源?【英文标题】:OpenID Connect - should the id token be sent to the protected resource in this case?OpenID Connect - 在这种情况下是否应该将 id 令牌发送到受保护的资源? 【发布时间】:2018-01-26 11:06:45 【问题描述】:假设我有一个本地应用程序需要向其发出请求的 Web API。此 API 需要验证通过本机应用程序发出这些请求的用户是谁。 OpenID Connect 似乎是正确的选择,因为它是关于身份验证而不是 OAuth 授权。
本机应用程序将用户凭据发送到 IDP 并取回访问令牌(用于授权)和 id 令牌(用于身份验证)。根据我对 OIDC 的了解,访问令牌将被发送到 API,但 id 令牌仅适用于本机客户端应用程序。这对我来说没有意义,因为关心用户是谁的是 API,而不是原生应用程序。
那么为什么不将 id 令牌也传递给受保护的资源(也称为 API)?如果您不将 id 令牌传递给 API,那么如何保证访问令牌是安全的并且可用于对用户进行身份验证?否则,它似乎会失去使用 OIDC 而不是 OAuth 的好处。
【问题讨论】:
【参考方案1】:OIDC 规范的设计方式是,ID 令牌始终用于客户端(本机应用程序),而访问令牌用于资源 (API)。 ID 令牌始终是 JWT 令牌,但访问令牌可以是不同的类型。
Access Token 的目的不是认证而是授权(Delegated Authorization)。如果出于某种原因,资源服务器想了解用户,它可以调用 user-info 端点。
代币交换的安全性/有效性可以通过多种方式验证:
将加密/签名与公钥/私钥模型一起使用,其中授权服务器使用其私钥加密/签署访问令牌,资源服务器使用公钥解密/验证。
使用令牌自省端点来验证声明、令牌的有效性等。
AUD、AZP 等其他属性有助于验证已发布的访问令牌。
一些 OIDC 提供商使用 ID_Tokens 来访问 API - 这与 OIDC 规范建议的模型不同
这个article对这些场景有详细的解释。
【讨论】:
以上是关于OpenID Connect - 在这种情况下是不是应该将 id 令牌发送到受保护的资源?的主要内容,如果未能解决你的问题,请参考以下文章
OpenID-Connect 身份验证服务器的登录页面中是不是需要 CSRF 令牌?
如何确定用户是不是仍在使用 PingFederate OpenID Connect 隐式客户端流登录?
OpenID Connect 是不是支持资源所有者密码凭证授予?
@EnableOAuth2Sso 注释 OpenID Connect 是不是兼容?