带有存储在 cookie 中的刷新令牌的 SPA - 如何使用 IdentityServer4 进行配置?

SPA with refresh tokens stored in cookie - how to configure with IdentityServer4?

我有一个 SPA,它使用长期独立的 JWT 与 API 通信以进行身份​​验证。

SPA 当前正在本地存储中存储此 JWT。

除了从安全角度来看这非常糟糕之外,另一个主要问题是我有办法撤销对 API 的访问(顺便说一句,需要保持无状态)。一个用户拥有一个令牌,他们可以无限期地使用它。

我想开始使用刷新令牌。我知道这些通常不推荐用于 SPA,但是在阅读后 The Ultimate Guide to handling JWTs on frontend clients 我相信有一种方法可以安全地做到这一点。

我想要什么:

这似乎是最安全的选项,最大限度地减少了 XRSF 和 CSRF:

如果这个方法像我认为的那样充分证明(请证明我错了!),为什么网上很少提到它?

IdentityServer4 文档似乎没有涵盖这一点。有人可以建议如何实施吗?我希望可能有一个 属性 我可以按照 UseCookiesForRefresh 的方式在客户端配置中设置,但没有。

您可以使用 ReferenceToken 类型而不是 Jwt Token 来在用户会话结束(或注销)时撤销令牌。 Reference Token

您需要更改客户端配置中的 AccessTokenType

new Client
    {
        ClientName = "OAuth Test",
        ClientId = "TestClientId",
        AllowedGrantTypes = GrantTypes.Hybrid,
        AccessTokenLifetime = 300,
        AllowOfflineAccess = true,
        AccessTokenType = AccessTokenType.Reference,
        ......
    }

当用户注销时,您可以使用以下行来撤销该会话中生成的所有令牌。

await _interaction.RevokeTokensForCurrentSessionAsync();