当前位置: 首页 > 知识库问答 >
问题:

带有/刷新的身份验证的安全性和最佳实践

许俊雅
2023-03-14

假设我有一个Web应用程序,我在其中实现了刷新令牌

    < li >用户使用发送到< code>/login REST APIendpoint的正文中的用户名和密码登录。
  • endpoint创建一个到期时间为1个月的刷新令牌,并将散列后的刷新令牌存储在对应于用户ID的Db中。
  • endpoint创建到期时间为15分钟的JWT访问令牌,该令牌使用服务器密钥签名并对用户ID进行编码。
  • endpoint使用刷新和访问令牌响应客户端的到期时间。
  • 客户端将刷新令牌存储在local存储中,并将访问令牌存储在内存中。
    < li >endpoint检查访问令牌JWT是否由服务器密钥签名。 < li >endpoint检查访问令牌JWT未过期。 < li >如果endpoint返回未授权,或者客户端检查访问令牌是否过期,请从< code>/refreshendpoint获取新的访问令牌JWT,然后重试。
  • 如果 Db 表中存在刷新令牌的哈希值,则返回关联的用户 ID 并生成由服务器签名的新访问令牌 JWT。同时生成新的刷新令牌,从 DB 中删除旧条目,然后插入新条目(刷新令牌轮换)。
  • 如果 Db 表中不存在刷新令牌的哈希值,则返回未授权,用户被注销并要求重新登录(即步骤 #1)。
  • 对客户端的响应已更新刷新令牌和访问令牌 JWT。
  • 客户端像以前一样将刷新令牌存储在本地存储中,访问令牌 JWT 存储在内存中。

我的问题是:

    < li >刷新令牌存储在< code>localStorage中,这对于使用开发工具的用户是可见的。难道恶意用户就不能获取这个刷新令牌并将其传递给< code>/refresh以获得功能访问令牌JWT吗?然后,他们可以使用令牌发出恶意请求。我没看到任何地方提到这个?刷新令牌是否不应存储在< code>localStorage中?

总的来说,与这个问题相关的是,这个流程和实现是否安全?这是最佳实践吗?应该改变或改进什么?

如果刷新令牌到期时间为1个月,并且用户1个月未登录,他们将被自动注销并需要重新进行身份认证。有什么办法解决这个问题吗?

有没有用于NodeJS的库或框架可以为您管理它?我找不到任何。我只能看到诸如“使用GitHub登录”或“使用Google登录”等内容的OAuth2库。

共有1个答案

薛霄
2023-03-14

对于新项目,我根本不会在浏览器中存储令牌,而是考虑使用 BFF 模式并在后端处理所有令牌交互。

请查看这两个视频:

  • https://blog.jetbrains.com/dotnet/2022/04/25/webinar-using-the-bff-pattern-to-secure-spa-and-blazor-applications/
  • https://www.youtube.com/watch?v=lEnbi4KClVw
 类似资料:
  • 在微服务中构建身份验证有几种方法。然而,使用JWT令牌和OAuth协议以及OpenID连接标识层是非常流行的。 在本教程解释如何实现这一目标时,有一个提示: 另一方面,我看到Ping标识也使用按引用传递的方法。你能帮我理解背后的道理吗?

  • 我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST

  • 问题内容: 在不使用CMS或繁重框架的情况下,对用户进行身份验证的最佳最新库/方法是什么? 响应中应包含关于您认为应被视为涉及用户身份验证的新PHP开发标准的建议。 问题答案: OpenID是一种基于用户在常见网络服务(例如Yahoo,Google和Flickr)上现有帐户进行身份验证的方法。 登录到您的站点是基于成功登录到远程站点。 您不需要存储敏感的用户信息或使用SSL来保护用户登录。 可以在

  • 问题内容: 背景: 我正在为REST Web服务设计身份验证方案。这并不是“真正”需要安全的(它更多是一个个人项目),但我想使其与练习/学习经验一样安全。我不想使用SSL,因为我不想麻烦,而在大多数情况下,它不需要设置它。 要解决这个问题: S3和OAuth都依赖于对请求URL以及一些选定的标头进行签名。他们都没有在POST或PUT请求的请求主体上签名。这难道不容易受到中间人攻击,这种中间人攻击会

  • 这可能涉及到会话cookie、服务器端会话存储以及一些会话APIendpoint,通过身份验证的web UI可以访问这些endpoint来获取当前用户信息,以帮助个性化或甚至确定客户端的角色/能力。服务器仍将强制执行保护对数据访问的规则当然,UI将仅仅使用这些信息来定制体验。 将其视为使用公共API的任何第三方客户端,并使用类似于OAuth的某种令牌系统进行身份验证。客户端UI将使用此令牌机制来验