2016-09-21 5 views
2

Ich verwende benutzerdefinierte Authentifizierung und erzeuge ein JWT-Token.Azure Mobile Apps, Autorisierung funktioniert, Tokenablauf funktioniert jedoch nicht

Wenn ich zu einem Dienst posten, wird jedes Autorisierungsattribut, das heißt [Authorize(Roles = "Admin")], respektiert, und Benutzer, die diese Rolle nicht haben, erhalten einen Autorisierungsfehler (gut!). Dies unterstreicht für mich, dass die Tokengenerierung und das Zurückschreiben funktioniert!

Wenn jedoch ein Token abläuft, passiert nichts. Und als gültiges Token behandelt wird, während ich eine Art Ausnahme sollte immer, ist mein Code dies:

app.UseAppServiceAuthentication(new AppServiceAuthenticationOptions() 
{ 
    SigningKey = ConfigurationManager.AppSettings["authSigningKey"], 
    ValidAudiences = new[] { ConfigurationManager.AppSettings["authAudience"] }, 
    ValidIssuers = new[] { ConfigurationManager.AppSettings["authIssuer"] }, 
    TokenHandler = config.GetAppServiceTokenHandler() 
}); 

Und:

JwtSecurityToken token = AppServiceLoginHandler.CreateToken(
new Claim[] { new 
Claim(JwtRegisteredClaimNames.Sub, assertion["username"]) }, 
       mySigningKey, 
       myAppURL, 
       myAppURL, 
       // Setting very short time to test expiration 
       TimeSpan.FromSeconds(10)); 

Ich prüfe vor Ort und ich erwarte einen Fehler mit einem abgelaufenen Token an den Client gesendet werden. Was mache ich falsch?

Antwort

2

Es gibt eine Ablauffrist von 5 Minuten, um den Zeitversatz zu berücksichtigen. Ich schätze, dass Sie dieses Token irgendwann nach den 10 Sekunden, aber vor Ablauf der 5-Minuten-Frist senden. Versuchen Sie länger als 5 Minuten zu warten, um zu bestätigen, ob das Token abgelaufen ist.

+1

Nach verschwendeten Stunden der Untersuchung war dies die Lösung. Das Azure-Team sollte eine Ausnahme oder eine Art Warnung für weniger als 5 Minuten hinzugefügt haben. Gute Stelle. – Adam

+0

Ich weiß, dass sie eine Taktverschiebung von 15 Minuten sogar empfehlen, aber die Zahl ist lächerlich. Auch ihre Server (zumindest nach verschiedenen Posts hier auf S/O) sind ziemlich synchron mit der Zeitverschiebung im Bereich von <3 Sekunden. –

0

Wenn ein Token abläuft, passiert nichts direkt. Wenn Sie das erste Mal versuchen, dieses Token zu verwenden, sollten Sie einen 401-nicht autorisierten Fehler für jeden Endpunkt mit dem Attribut [Authorize] erhalten. Der Grund dafür ist, dass das Token, das Sie übermitteln, nicht mehr gültig ist.

Verwandte Themen