我正在使用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值。检测重放攻击的确切方法是客户特定的。
答案 0 :(得分:1)
为什么不在授权请求中使用response_type
参数。通过更改其值,您可以更改收到的授权响应内容。
身份文档提及可能的response type
值。以下是从documentation
如您所见,如果您不希望SPA接收ID令牌,您可以将response_type
值设置为令牌。如果这样做,您将只获得一个访问令牌,该令牌由OAuth 2.0规范强制执行。 (请参阅here中的OAuth 2.0隐式流响应_type说明)。请注意,当您使用 response_type=token
时,您使用的是OAuth 2.0(不是OIDC)
只要您使用各自协议启用的功能,我认为您的方法没有任何错误。