gpt4 book ai didi

.net - 使用 ui-router 版本 1.x 在状态转换中滑动过期的 AngularJS token 身份验证

转载 作者:行者123 更新时间:2023-12-02 01:03:11 25 4
gpt4 key购买 nike

在我们的应用程序中,我们有一个要求,即用户应该登录一定的时间,这可以由系统管理员配置,比如 10 分钟。我们还有另一个要求,即当用户导航到应用的不同部分时,这个时间应该被刷新并设置回配置的数量。

我们的应用程序是用 AngularJS 编写的,我们使用 ui-router 进行路由,因此当用户在不同状态之间导航时,注销时间会更新。

后端是用.NET写的,我们用jwt tokens做认证,Token有一个expiration字段。在每个请求的开始,我们检查 token 是否未过期。

我有一个问题,我不知道如何告诉服务器它应该更新 token 过期时间,我正在使用 ui-router 版本 1 并且它有一些用于执行服务器的 Hook 状态转换之前的事情,我最终得到了这样的东西:

  $transitions.onBefore({
to: "*"
}, function(trans) {
// update the client ui, and also tell the server to update
// the timeout in the serverside and database

return authService.refreshToken();
});

但我不确定这种方法是否正确,我无法在 REST 架构中找到解决此类问题的好方法,如果您能告诉我这种方法的优缺点或指出我将不胜感激正确的实现

最佳答案

理论

据我所知,JWT 标准并没有真正说明刷新。 ( https://tools.ietf.org/rfc/rfc7519.txt )

如果我很理解您的问题,您希望某人的 token 在 X 分钟不活动后自动更新。我想您想要的这种方法是滑动 session

你可以在那里看到一篇关于它的好文章:https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/

在这种情况下,最佳做法不是延长 token 的生命周期,而是申请一个新 token 。你会发现很多文章和约定都在谈论它。出于安全考虑,越短越安全。

即使它是为 oauth 编写的,这是一篇非常好的文章,列出了 token 管理的不同方式: https://www.oauth.com/oauth2-servers/access-tokens/access-token-lifetime/


用例

在您的 API 中,我会提供一个 refreshToken,它允许通过 HTTP 请求 更新 token 。

在你的 Front 中,我会制作一个存储最后转换日期的服务,比方说 lastTransitionDate = new DateTime()。它还将存储 token refreshToken token 的到期日期

现在当你有一个过渡时,

  1. 您检查 token 是否仍然有效(例如通过发送 checkToken 请求)
  2. 如果 token 不再有效并且 lastTransitionDate 已超过 X 分钟,您将强制注销。
  3. 如果 token 不再有效但 lastTransitionDate 少于 X 分钟,则您通过发送 refreshToken 请求新 token 。
  4. 在所有检查之后,您重置 lastTransitionDate

唯一需要确定的是,X 足以确保用户不会断开连接,如果他只是花了一些时间阅读页面上的一些内容而没有触发一个过渡。

关于.net - 使用 ui-router 版本 1.x 在状态转换中滑动过期的 AngularJS token 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217656/

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