gpt4 book ai didi

asp.net-core - 带有存储在 cookie 中的刷新 token 的 SPA - 如何使用 IdentityServer4 进行配置?

转载 作者:行者123 更新时间:2023-12-04 04:15:20 25 4
gpt4 key购买 nike

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

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

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

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

我想要什么:

  • 当用户登录(密码授予)时,服务器仅使用短期 access_token 进行响应,但会设置一个带有刷新 token 的 HttpOnly cookie。
  • 客户端将 access_token 存储在内存中,并在发出 API 请求时使用它。
  • 当 access_token 即将到期时,我会向 auth 服务器发出请求以刷新 token 。因为 cookie 是由 auth 服务器设置的,所以它会自动包含在请求中。服务器使用我们存储在内存中的更新的 access_token 进行响应。
  • 如果用户离开 SPA 并稍后返回,我们可以简单地向身份验证服务器发出请求以刷新 token ,这会为我们提供一个全新的 token (无需在本地存储中存储任何内容)。<

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

  • 如果有人设法将一些代码注入(inject) SPA 并窃取 access_token,它无论如何都会在 5 分钟后过期。注入(inject)的代码永远无法访问 refresh_token。
  • 您不能欺骗用户发出 CSRF API 请求,因为您没有 access_token(访问 token 有效地用作 CSRF token )。
  • 如果有人设法以某种方式获得了对 refresh_token 的访问权限,则可以在 auth 服务器上将其撤销。

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

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

最佳答案

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

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

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

当用户注销时,您可以使用以下行来撤销在该 session 中生成的所有 token 。

await _interaction.RevokeTokensForCurrentSessionAsync();

关于asp.net-core - 带有存储在 cookie 中的刷新 token 的 SPA - 如何使用 IdentityServer4 进行配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60796291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com