我正在构建一个支持JWT身份验证的角度应用程序。我使用Spring Boot构建JWT服务器。用户提供他/她的凭据进行身份验证。身份验证成功后,包含访问令牌和身份验证的响应将转发给用户。 我的JWT访问令牌中有一个exp值,其中包含令牌寿命。刷新令牌将保留在数据库中。 要获取新的访问令牌,您必须发送带有此标头的请求 --- >>> X-Auth:refreshToken <<< ---以获取新的访问令牌。 我实现了一个函数,该函数将使用刷新令牌重新发送对访问令牌的请求。 我曾尝试实现该功能以全局运行该功能,但无济于事。我想找出是否有一种方法可以在我的角度应用程序中全局运行一次该功能。
/***Login sample request***/
{
"password": "secret123",
"username": "nkengbeza"
}
/***Login sample response***/
{
"access_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJua2VuZ2JlemEiLCJhdXRoIjpbeyJhdXRob3JpdHkiOiJBRE1JTiJ9XSwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTU0ODY2OTE0MSwiZXhwIjoxNTQ4NjcyNzQxfQ.oaWOIaeMqLg35unM82bcNg88ga030m5J1k7E5EM2O0s",
"refresh_token": "a102c7a063c7f149bcb276eadf83c0c61659ff9b37c0a8ab7d29e92c08ac94e7aa99abc5e9a3c1c59da4e66f1ada0c6a02dca2f577a4aa3f81885c73f5a879d1"
}
/***Request for an access token using a valid refresh token***/
reLogin() {
(async () => {
const resp = await fetch(AppRoutes.RELOAD_AUTH, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Auth': this.getAuth().refreshToken
}
});
if (resp.status !== 200) {
this.doLogout();
}
const content = await resp.json();
const accessToken = content.access_token;
const tokenInfo = this.getDecodedAccessToken(accessToken); // decode token
const auth = new Auth();
auth.refreshToken = content.refresh_token;
auth.role = tokenInfo.auth[0];
const expireDate = tokenInfo.exp; // get token expiration dateTime
this.setAccessToken(accessToken);
this.setAuth(auth);
})();
}