OpenID Connect - 在这种情况下,是否应将id令牌发送到受保护资源?

时间:2017-08-17 21:25:58

标签: security oauth-2.0 single-sign-on openid-connect

假设我有一个本机应用程序需要发出请求的Web API。此API需要通过本机应用程序验证用户是谁在发出这些请求。 OpenID Connect似乎是正确的选择,因为它是关于身份验证而不是OAuth授权。

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

那么为什么id标记也没有传递给受保护资源(又称API)?如果您没有将id令牌传递给API,那么什么可以保证访问令牌是安全的并且可以用来验证用户?否则,它似乎失去了使用OIDC而不是OAuth的好处。

1 个答案:

答案 0 :(得分:8)

OIDC规范的设计方式是ID令牌始终用于客户端(Native app),而Access令牌用于资源(API)。 ID令牌始终是JWT令牌,但Access令牌可以是不同类型。

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

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

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

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

其他属性(如AUD,AZP)有助于验证已颁发的访问令牌。

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

article详细说明了这些情况。