【问题标题】:JWT Expire BehaviorJWT 过期行为
【发布时间】:2019-10-08 02:11:18
【问题描述】:

我是 JWT 世界的新手(老实说,一般来说是安全性)。我有一个使用 JWT 不记名令牌保护的 .NET Core2 服务。从客户端的角度来看,一旦令牌过期并发送401Unauthorized 响应会发生什么?我是否希望客户自己请求新令牌?

如果预计客户端会请求新令牌...这是否意味着在对我的服务进行的每个 API 调用上都必须使用检查 401Unauthorized 的代码进行包装,知道调用不同的端点以创建一个新的有效令牌,然后用新令牌重新进行原始调用?

如果在令牌到期时正确加载特定网页(页面的一部分使用 tokenA 加载,然后页面的其余部分需要使用 tokenB 加载),我不确定如何提供良好的用户体验。

【问题讨论】:

    标签: .net security asp.net-core .net-core jwt


    【解决方案1】:

    对于后端使用 JWT 的客户端来说,拥有你描述的功能是很正常的。

    通常后端会返回 401(通常伴随着 {"message": "Access token expired"} 正文)。

    因此,处理对后端的请求的类通常将请求函数包装在 try catch 中。

    如果请求失败,您可以检查 401 错误代码和“访问令牌已过期”消息,然后刷新令牌并重新运行请求。

    您还可以(在请求之前)解码 JWT 令牌并检查它是否过期(通过查看过期时间)。然后,您可以在发出预期请求之前执行刷新令牌调用。

    这两种方法都会导致网站加载稍有延迟,但很可能(取决于您的 API 性能)会出现很小的延迟。

    请记住确保您能够以某种方式区分来自后端的常规 401 Unauthorized 和 access-token-expired 错误。

    【讨论】:

    • 这对我来说很有意义。我很感激快速的回答。现在我需要了解如何以可用于未来调用(或至少在它们过期之前)的方式保存令牌。 :-)
    • 我对 asp.net 不是很了解,所以不确定我能不能帮助你,但祝你好运:-)
    【解决方案2】:

    查看刷新令牌的使用和实现。这里的想法是对令牌的初始请求会生成一个刷新令牌以及普通令牌。普通令牌的寿命较短,而刷新时间较长。是的,当您拨打电话时,您需要检查 a) 令牌是否已经过期 b) 他们的响应是什么,并协调以自动获取更新的令牌。它应该对用户透明。

    这里有更多细节:https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2019-03-04
      • 1970-01-01
      • 2022-09-23
      • 2017-03-04
      • 2021-09-23
      • 2014-12-28
      • 2019-07-04
      • 2022-09-27
      相关资源
      最近更新 更多