我们真的需要在OIDC的隐式流程中使用id_token吗?

时间:2018-02-13 11:57:12

标签: identityserver4 openid-connect identityserver3

我正在使用SPA应用程序,并且我使用推荐的隐式流程,并且我能够获得access_token和id_token。由于我需要的不仅仅是个人资料信息,我还创建了一个单独的端点来返回用户个人资料信息(以及所有其他特定于我们业务的信息),并且该端点受到保护,并且可以是仅使用access_token作为承载令牌访问。在SPA中获取access_token之后,我调用此端点来获取所有用户信息(包括在UI上显示的名字,姓氏等)。如果返回的id_token和access_token对存在任何问题,则用户配置文件信息端点调用将失败。那么,我真的需要验证id_token吗?因为我不依赖于该令牌中的任何信息。

要对外部登录提供程序或授权代码流进行身份验证,验证id_token是有意义的,但在我的情况下,我不确定。

根据OpenID规范:

使用隐式流时,ID令牌的内容必须以与第3.1.3.7节中定义的授权码流相同的方式进行验证,但本节中指定的差异除外。 1.客户端必须使用JOSE Header的alg Header参数中指定的算法,根据JWS [JWS]验证ID令牌的签名。 2.必须检查nonce Claim的值,以验证它是否与在Authentication Request中发送的值相同。客户端应该检查重放攻击的nonce值。检测重放攻击的确切方法是客户特定的。

1 个答案:

答案 0 :(得分:1)

为什么不在授权请求中使用response_type参数。通过更改其值,您可以更改收到的授权响应内容。

身份文档提及可能的response type值。以下是从documentation

中提取的内容

enter image description here

如您所见,如果您不希望SPA接收ID令牌,您可以将response_type值设置为令牌。如果这样做,您将只获得一个访问令牌,该令牌由OAuth 2.0规范强制执行。 (请参阅here中的OAuth 2.0隐式流响应_type说明)。请注意,当您使用 response_type=token 时,您使用的是OAuth 2.0(不是OIDC)

只要您使用各自协议启用的功能,我认为您的方法没有任何错误。