Meine eckige Anwendung verwendet Träger-Tokens, wie in der Artikelserie http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/ beschrieben. Ich habe das gegabelte Beispiel verfolgt, um Token nahtlos zu aktualisieren, wenn das Zugriffstoken abgelaufen ist (über den HTTP-Code 401).Ermitteln, ob das Bearer-Token abgelaufen ist oder nur autorisiert wurde
Meine Frage ist, wie kann ich feststellen, ob das Bearer-Token abgelaufen ist oder nur einfach nicht autorisierte basierend auf der Rolle bestimmt?
Zum Beispiel hat meine Web-API-Methode das Attribut [Autorisieren (Rollen = "Admin")]. Wenn ich anrufe, bekomme ich meinen 401-Fehler zurück, der erwartet wird. Wenn jedoch mein Zugriffstoken abläuft und ich einen weiteren Web-API-Methodenaufruf tätige, wird ebenfalls ein 401-Fehler zurückgegeben. Heres mein responseError Handler in meinem Interceptor:
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;
}
Ich spiele herum mit verschiedenen Dingen, aber im Grunde, würde Ich mag meinen Token aktualisieren und meine Anfrage erneut senden, wenn die Zugriffstoken abgelaufen sind; Ich möchte jedoch mein Token nicht aktualisieren, wenn es aufgrund der angegebenen Rolle wirklich eine abgelehnte Anfrage ist.
Irgendwelche Gedanken?
Sie sollten eine 403 verboten zurückbekommen, wenn Sie eine Web-API-Methode mit dem Attribut [Autorisieren (Rollen = "Admin")] starten. 401 dient zur Authentifizierung. –
Hmmm, nach ein wenig mehr graben, was ich wahrscheinlich in erster Linie hätte tun sollen, wird das Web API Authorize-Attribut immer 401 nicht autorisiert für Authentifizierung und Autorisierung zurückgeben. – mmoreno79