Мое угловое приложение использует токены-носители, как указано в серии статей http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/. Я пошел по раздвоенному примеру, чтобы легко обновлять токены, когда токен доступа истек (через 401 http-код).Определите, истек ли токен-носитель или только что разрешен
Мой вопрос в том, как я могу определить, истек ли токен-носитель или просто несанкционирован в зависимости от определенной роли?
Например, мой метод api в Интернете имеет атрибут [Authorize (Roles = "Admin")]. Когда я звоню на это, я возвращаю свою ошибку 401, которая ожидается. Однако, когда мой токен доступа истекает, и я вызываю другой вызов метода web api, он также возвращает ошибку 401. Heres мой 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;
}
Я играл с разными вещами, но в основном, я хотел бы, чтобы обновить мой маркер и отправить мой запрос, когда маркер доступа истек; однако я не хочу обновлять свой токен, если это действительно отрицаемый запрос из-за указанной роли.
Любые мысли?
Вы должны вернуть 403 Запрещено при ударе по веб-методу api с атрибутом [Авторизовать (Роли = «Администратор»)]. 401 для аутентификации. –
Хммм, после немного большего количества копания, которое я, вероятно, должен был сделать в первую очередь, видимо, атрибут авторизации веб-API всегда будет возвращать 401 неавторизованным как для аутентификации, так и для авторизации. – mmoreno79