为什么 IdentityTokenLifetime 默认为 300 秒?

Why is the IdentityTokenLifetime default to 300 sec?

也许我应该问身份令牌的预期用途是什么。我认为它用于识别用户并且可以传递给其他服务(例如后端服务)并且该服务使用 id_token 来验证它是有效用户吗?但是我没有看到任何当前可用的端点来验证 id_token。如果不是,应该将什么从一项服务传递到另一项服务以验证用户?

采用 id_token 参数的唯一端点是作为 id_token_hint 传递的结束会话端点。但在那种情况下,为什么 IdentityTokenLifetime 默认仅为 300 秒?我不希望用户在 300 秒内结束会话。

根据 OpenID Connect 规范,身份验证是建立在 ID Token 之上的,

The primary extension that OpenID Connect makes to OAuth 2.0 to enable End-Users to be Authenticated is the ID Token data structure

收到 ID 令牌后,您就可以验证与您打交道的最终用户。 ID 令牌可以是短暂的(如您所见)。在那种情况下,您应该将访问令牌用于其他通信目的。

现在为了扩展这个答案,我想提一下用户信息端点、令牌自省和刷新令牌。

用户信息端点

OpenID Connect 规范定义了一个名为 userinfo.

的端点

The UserInfo Endpoint is an OAuth 2.0 Protected Resource that returns Claims about the authenticated End-User.

可以使用有效的访问令牌来交换经过身份验证的用户信息。依赖访问令牌的端点可以使用这些信息来验证和验证最终用户。

身份服务器参考 - LINK

令牌内省

RFC7662 定义一种检查访问令牌有效性的方法。它只是期望访问令牌作为不记名令牌并提供令牌的有效性信息。

令牌刷新

这是最有趣的部分。可以使用上面提到的两个端点来验证访问令牌和绑定到访问令牌的最终用户。但是正如您所提到的,id 令牌和访问令牌已过期。但是刷新令牌可能不会过期。 Google 使用不会过期的刷新令牌(但它并不一定说你必须这样做,因为 Google 这样做了!)。并且可以使用刷新令牌刷新访问令牌和 ID 令牌。是的,OIDC 规范。没有提到刷新请求的 id 令牌。但是身份提供者可以发送一个更新的 id 令牌(或者它可以是一个配置)。 MS Azure AD 使用这种方法。

现在如您所见,围绕令牌验证进行了很多工作。您的最终解决方案可以是 OIDC 规范中可用选项的组合。

最后的想法是,长期存在的令牌可能会带来安全威胁。特别是如果您的客户端类型是 public。请注意将令牌生命周期配置为更大的值,而不是这样做,而是尝试使用规范的其他可用功能。

身份令牌是一次性令牌。

它包含用户身份和身份验证元数据。一旦令牌被验证,它就可以(理论上)被删除。只需选择您感兴趣的声明即可。

在这种情况下,您希望在注销期间保留身份令牌以获得特殊功能。

身份令牌从未传递。这就是访问令牌的用途。