Ich habe eine einfache (halb fertig) http Abfangjäger, die ein Bearer
Token anhängt (gespeichert in $window.sessionsStorage
) mit dem Header, so dass REST API-Anfragen authentifiziert werden kann:
function accessTokenHttpInterceptor($window, $http) {
// Try to get token details from sessionStorage
var accesstoken=$window.sessionStorage.getItem('userInfo-accesstoken');
var refreshtoken=$window.sessionStorage.getItem('userInfo-refreshtoken');
var tokenexpiry=$window.sessionStorage.getItem('userInfo-tokenexpiry');
return {
request: function($config) {
// Check if the access token, refresh token and expiry date exists:
if (accesstoken == undefined || refreshtoken == undefined || tokenexpiry == undefined) {
console.log('Missing token details');
// TODO REDIRECT TO LOGIN PAGE
}
// We have an access token. Has it expired?
var expiry = new Date($window.sessionStorage['userInfo-tokenexpiry'])
var now = new Date
if (now > expiry) {
console.log('Token expired');
// TODO REFRESH THE TOKEN
};
// Set the authorization header
$config.headers['Authorization'] = 'Bearer ' + accesstoken;
return $config;
},
};
}
accessTokenHttpInterceptor.$inject=['$window'];
function httpInterceptorRegistry($httpProvider) {
$httpProvider.interceptors.push('accessTokenHttpInterceptor');
}
angular
.module('myApp')
.config(httpInterceptorRegistry)
.factory('accessTokenHttpInterceptor', accessTokenHttpInterceptor)
Wie Sie sehen können, ich bin in der Lage zu sehen, ob das Token an die API, um den Anruf zu machen, bevor abgelaufen ist.
Kann jemand mir helfen, wie das Token vor der Herstellung der eigentlichen API-Anfrage zu aktualisieren? Ich würde denken, dass eine weitere $ http-Anfrage erneut abgefangen würde und in einer Endlosschleife enden würde. Das Token wird aktualisiert, indem eine POST-Anforderung an die API gesendet wird, wobei das Aktualisierungstoken als Parameter übergeben wird und nicht wie andere API-Anforderungen im Autorisierungsheader.