OpenID Connect 用户信息端点使用
OpenID Connect UserInfo Endpoint Usage
在收到有效的访问令牌后,调用 userinfo
端点并检索用户元数据是否被认为是最佳实践,对于您的应用程序的每个后续调用,还是应该调用 userinfo
而不是调用一次,并且用户元数据响应存储在例如 cookie 中,以便后续请求从 cookie 中读取用户元数据,而不是为每个请求调用对 userinfo
的调用。
最后还是要看用例:
在普通消费者用例中,用户信息端点将提供很少更改的信息,缓存信息是一个安全的假设。然而,在某些企业用例中,用户信息端点可能会提供用于实时访问控制决策的信息,在这种情况下,缓存信息可能并不明智,或者至少不会长期缓存。
但是您的客户甚至可能不依赖于变化的数据,例如如果它唯一使用的是持久标识符 (sub
) 和 given_name
/family_name
声明。然后,即使从用户信息端点返回的其他数据可能会随时间变化,您的客户端也不会打扰,而是缓存 sub
、given_name
和 family_name
,而无需再次调用用户信息端点.
此外,声明也可能作为 id_token
的一部分返回(例如,包括 first_name
family_name
),这对于某些用例来说可能就足够了,因此不需要完全调用用户信息端点。
总而言之:这取决于从用户信息端点返回的信息类型、客户对信息的要求以及 id_token
.
中已经可用的信息
在收到有效的访问令牌后,调用 userinfo
端点并检索用户元数据是否被认为是最佳实践,对于您的应用程序的每个后续调用,还是应该调用 userinfo
而不是调用一次,并且用户元数据响应存储在例如 cookie 中,以便后续请求从 cookie 中读取用户元数据,而不是为每个请求调用对 userinfo
的调用。
最后还是要看用例:
在普通消费者用例中,用户信息端点将提供很少更改的信息,缓存信息是一个安全的假设。然而,在某些企业用例中,用户信息端点可能会提供用于实时访问控制决策的信息,在这种情况下,缓存信息可能并不明智,或者至少不会长期缓存。
但是您的客户甚至可能不依赖于变化的数据,例如如果它唯一使用的是持久标识符 (sub
) 和 given_name
/family_name
声明。然后,即使从用户信息端点返回的其他数据可能会随时间变化,您的客户端也不会打扰,而是缓存 sub
、given_name
和 family_name
,而无需再次调用用户信息端点.
此外,声明也可能作为 id_token
的一部分返回(例如,包括 first_name
family_name
),这对于某些用例来说可能就足够了,因此不需要完全调用用户信息端点。
总而言之:这取决于从用户信息端点返回的信息类型、客户对信息的要求以及 id_token
.