Ứng dụng góc của tôi đang sử dụng mã thông báo mang như được nêu trong loạt bài viết http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/. Tôi đã làm theo ví dụ được chia đôi để mã thông báo làm mới liên tục khi mã thông báo truy cập đã hết hạn (qua mã http 401).Xác định xem mã thông báo mang đã hết hạn hay chỉ được ủy quyền
Câu hỏi của tôi là làm cách nào tôi có thể xác định liệu mã thông báo mang đã hết hạn hay chỉ đơn giản là trái phép dựa trên vai trò được xác định?
Ví dụ: phương pháp api web của tôi có thuộc tính [Authorize (Roles = "Admin")]. Khi tôi thực hiện cuộc gọi đến đó, tôi nhận lại lỗi 401 của tôi, dự kiến. Tuy nhiên, khi mã thông báo truy cập của tôi hết hạn và tôi thực hiện một cuộc gọi phương thức api web khác, nó cũng trả về lỗi 401. Heres handler responseError tôi trong đánh chặn của tôi:
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;
}
Tôi đã chơi xung quanh với những thứ khác nhau nhưng về cơ bản, tôi muốn làm mới thẻ của tôi và gửi lại yêu cầu của tôi khi thẻ truy cập đã hết hạn; tuy nhiên, tôi không muốn làm mới mã thông báo của mình nếu đó thực sự là yêu cầu bị từ chối do vai trò được chỉ định.
Mọi suy nghĩ?
Bạn sẽ nhận lại 403 Cấm khi nhấn phương pháp api trên web có thuộc tính [Ủy quyền (Vai trò = "Quản trị viên")]. 401 là để xác thực. –
Hmmm, sau khi tìm hiểu thêm một chút, có lẽ tôi nên làm ngay từ đầu, dường như thuộc tính Web API Authorize sẽ luôn trả về 401 trái phép cho cả xác thực và ủy quyền. – mmoreno79