В моем приложении angular используются токены-носители, как описано в серии статей http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/. Я пошел по раздвоенному примеру, чтобы плавно обновлять токены, когда токен доступа истек (через 401 http-код).
Мой вопрос в том, как я могу определить, истек ли токен-носитель или просто несанкционирован на основании определенной роли?
Например, мой метод web api имеет атрибут [Authorize (Roles = "Admin" )]. Когда я звоню на это, я возвращаю свою ошибку 401, которая ожидается. Однако, когда мой токен доступа истекает, и я вызываю другой вызов метода web api, он также возвращает ошибку 401. Heres my responseError обработчик в моем перехватчике:
responseError: function (rejection) {
var deferred = q.defer();
if (rejection.status === 401) {
var authService = $injector.get('authService');
authService.refreshToken().then(function (response) {
_retryHttpRequest(rejection.config, deferred);
}, function () {
authService.logOut();
$location.path('/dashboard');
deferred.reject(rejection);
});
} else {
deferred.reject(rejection);
}
return deferred.promise;
}
Я играл с разными вещами, но в основном, я хотел бы обновить свой токен и повторно отправить мой запрос, когда токен доступа истек; однако я не хочу обновлять свой токен, если это действительно отрицаемый запрос из-за указанной роли.
Любые мысли?