【发布时间】:2018-07-23 19:02:28
【问题描述】:
我正在开发一个 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 Parameter 中指定的算法,根据 JWS [JWS] 验证 ID Token 的签名。 2. 必须检查 nonce Claim 的值,以验证它是否与 Authentication Request 中发送的值相同。客户端应该检查重放攻击的 nonce 值。检测重放攻击的精确方法是特定于客户端的。
【问题讨论】:
-
想知道为什么你做了一个额外的端点为什么不直接使用docs.identityserver.io/en/release/endpoints/userinfo.html?
-
@DalmTo:正如我提到的,我们的自定义端点返回的不仅仅是常规的用户身份相关信息,而且它位于不同的数据库中......所以我不想把它带入 IdP
-
你为什么首先使用 OpenID Connect?
-
@KcDoD 只有一个我们正在构建的应用程序是 SPA,我们还有一些 MVC、移动和其他应用程序......其他 OIDC 流程对其他应用程序很有用
-
验证刷新令牌,即使您此后不使用它也有好处,因为验证包括检查随机数,以确保您获得预期的响应。 oidc-client-js 库为您完成了这一切,您在使用它吗?
标签: identityserver4 openid-connect identityserver3