JavaScript 应用程序应如何验证 IdentityServer4 发出的 access_token?

How should a JavaScript application validate an access_token issued by IdentityServer4?

例如,假设我想确定用户是否仍然 "logged in"...也就是他们的令牌尚未过期。

当我第一次获得 access_token 时,我将我的 JWT access_token 存储在 localStorage 中。我知道仅仅检查 localStorage 以查看 access_token 是否存在是不够的。我读到了内省终点,但它似乎是针对 API 的——而不是 JS 客户端。使用客户端库进行 JWT 验证的最佳方法是什么?我不喜欢这样,因为我可能需要切换到参考标记。我想为此调用服务器端。

用 JavaScript 客户端验证 access_token 的正确方法是什么?

更新: 经过进一步调查并听取了 leastprivilege 的建议,我将使用 OIDC JavaScript client 所以我不必担心这个。

大多数 jwt 令牌都带有一个过期时间字段(虽然取决于服务器)。您可以使用 this 之类的库在将 JWT 令牌保存到本地存储之前对其进行解码,然后将过期时间与令牌一起保存在其中,这样您就可以只检查本地存储和过期时间以及当前是否day 大于到期时间,您丢弃之前的令牌并获得一个新令牌。

这个库可能对您有用:oidc-client-js. Some documentation is available here

客户端应用程序不应该 "decode" 访问令牌。确切的格式是发行者和 API 之间的实现细节。

请求访问令牌时,令牌响应包含一个 'expires_in' 参数,告诉客户端令牌有效的秒数。