Javascript AngularJS-处理刷新令牌?
我正在用AngularJS构建一个SPA,并与服务(JAVA)进行通信 当用户发送用户名/通行证时,服务同时发回:Acces令牌和刷新令牌。我正在尝试处理:如果我收到状态为401的响应,请发回刷新令牌,然后再次发送您的最后一个请求。我试图通过包含$http来实现这一点,但angular不允许我将其包含在这个拦截器中。有没有办法用我收到的这个响应参数重新创建原始请求 比如:Javascript AngularJS-处理刷新令牌?,javascript,angularjs,authentication,access-token,http-status-code-401,Javascript,Angularjs,Authentication,Access Token,Http Status Code 401,我正在用AngularJS构建一个SPA,并与服务(JAVA)进行通信 当用户发送用户名/通行证时,服务同时发回:Acces令牌和刷新令牌。我正在尝试处理:如果我收到状态为401的响应,请发回刷新令牌,然后再次发送您的最后一个请求。我试图通过包含$http来实现这一点,但angular不允许我将其包含在这个拦截器中。有没有办法用我收到的这个响应参数重新创建原始请求 比如: 我拿到401 保存我的请求 如果我有刷新令牌,请发送该刷新令牌 成功后重新发送我的请求 错误时重定向到/登录页面 'use
'use strict';
angular.module('testApp')
.factory('authentificationFactory', function($rootScope, $q, $window, $location, CONF) {
return {
request: function(config) {
config.headers = config.headers || {};
if ($window.sessionStorage.token) {
config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
}
console.log(config);
$rootScope.lastRequest = config;
return config;
},
response: function(response) {
console.log($rootScope.lastRequest);
if (response.status === 401) {
if ($window.sessionStorage.refreshToken) {
//Save, request new token, send old response
//if it fails, go to login
$location.url('/login');
} else {
$location.url('/login');
}
}
return response || $q.when(response);
}
};
});
他使用缓冲区在身份验证后重播请求。我强烈建议不要在像Angular这样的SPA上发送和存储刷新令牌 如果您使用的是会话存储或本地存储,那么您将打开一个机会窗口,通过XSS攻击或用户让计算机无人值守来捕获此刷新令牌
有关更多信息,请参阅或。Brilliant!稍后我会测试一下,然后回复你,非常感谢:)它并没有真正回答我的问题,但它确实把我带向了正确的方向。谢谢,你的最终解决方案是什么?@dyslexisDcuk介意发布你的解决方案吗?@MateeOw我真的很抱歉,我前一段时间换了公司,再也无法使用该代码了。嗨@dyslexisDcuk,你在这方面取得了任何成功,请与我分享。谢谢