gpt4 book ai didi

angularjs - 过期的 JWT token - 如何刷新 token

转载 作者:行者123 更新时间:2023-12-02 11:29:55 31 4
gpt4 key购买 nike

我正在开发一个移动应用程序,我意识到我的 token 的有效期有限。我正在使用 Symfony 服务器,它有一个刷新我 token 的功能:

/**
* @Route("/api/refresh", name="api_refresh")
*/
public function refreshTokenAction(Request $request)
{
if(!$request->headers->has('Authorization')) {
return;
}

$extractor = new AuthorizationHeaderTokenExtractor(
'Bearer',
'Authorization'
);

$token = $extractor->extract($request);

$encoder = $this->get('lexik_jwt_authentication.encoder');

$data = $encoder->decode($token);

if(!$data){
return;
}

$username = $data['mail'];

$user = $this->getDoctrine()->getRepository('AppBundle:Benevole')
->findOneBy(['mail' => $username]);

$token = $this->get('lexik_jwt_authentication.encoder')
->encode(['mail' => $user->getMail()]);

// Return genereted tocken
return new JsonResponse(['token' => $token]);

}

我将此服务器与 AngularJS 中的应用程序一起使用,在该应用程序中我以这种方式调用我的服务器:

var refreshToken = function(idPatient){
var token = window.localStorage.getItem('token'); // current valid token
return $http({
method : 'GET',
url : url + '/refresh',
headers : {Authorization : 'Bearer ' + token},
}).then(function(result) {
console.log(result.data);
return result.data;
});
};

当我测试我的函数刷新 token 时,单击一个按钮,它起作用了, token 被刷新。

我想知道如何自动刷新我的 token ,以便用户不必每次都断开连接,因为它具有相当的限制性^^我应该每次都检查我的 token 吗?我应该为应用程序设置几个条件以便每次都能找到它吗?

最佳答案

您应该接受有效(且未过期)的刷新 token 。假设客户端有责任在 exp 中指示的到期日期之前刷新 token 。 claim 。

当页面中使用活跃时,您可以调用该函数定期刷新 token 。

<小时/>

为了避免无限期地刷新 token ,您可以通过向 token 添加两个声明来跟踪 token 刷新(声明名称由您决定):

  • refreshLimit :表示token可以刷新多少次。
  • refreshCount :表示token被刷新了多少次。

因此,仅当满足以下条件时才刷新 token :

  • token 未过期 ( exp >= now )。
  • token 已刷新次数小于 token 可刷新次数 ( refreshCount < refreshLimit )。

刷新 token 时:

  • 更新到期日期 ( exp = now + some-amount-of-time )。
  • 增加 token 刷新次数 ( refreshCount++ )。

一旦 token 被签名并在服务器端验证签名后, token 的内容将无法被客户端篡改。

关于angularjs - 过期的 JWT token - 如何刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569150/

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