2017-09-08 3 views
0

Wie sollte der Client wissen, dass das Zugriffstoken abgelaufen ist, sodass er eine Anfrage mit einem Aktualisierungstoken für ein anderes Zugriffstoken stellt?Woher weiß man, dass das Zugriffstoken abgelaufen ist?

Wenn die Antwort lautet, dass die Server-API 401 zurückgibt, wie kann API dann wissen, dass das Zugriffstoken abgelaufen ist?

Ich benutze IdentityServer4.

Antwort

1

Ihre API sollte jeden Anruf abweisen, wenn das beinhaltende Bearer-Token bereits abgelaufen ist. Für eine Webapi-App wird IdentityServerAuthenticationOptions die Arbeit erledigen.

Ihre anrufende Webanwendung ist jedoch dafür verantwortlich, dass Ihr access_token am Leben bleibt. Wenn Ihre Webanwendung beispielsweise eine ASP.Net-Kernanwendung ist, können Sie AspNetCore.Authentication.Cookies verwenden, um eine Anfrage zu authentifizieren. In diesem Fall können Sie die Informationen zu den Token-Ablaufinformationen über das Ereignis OnValidatePrincipal finden.

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationScheme = "Cookies", 
    //ExpireTimeSpan = TimeSpan.FromSeconds(100), 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    Events = new CookieAuthenticationEvents() 
    { 
     OnValidatePrincipal = async x => 
     { 
      if (x.Properties?.Items[".Token.expires_at"] == null) return; 
      var now = DateTimeOffset.UtcNow; 

      var tokenExpireTime = DateTime.Parse(x.Properties.Items[".Token.expires_at"]).ToUniversalTime(); 
      var timeElapsed = now.Subtract(x.Properties.IssuedUtc.Value); 
      var timeRemaining = tokenExpireTime.Subtract(now.DateTime); 

      if (timeElapsed > timeRemaining) 
      { 
       //Get the new token Refresh the token 
      } 
     } 
    } 
} 

Ich habe eine vollständige Umsetzung, wie hinzugefügt in einem anderen StackOverflow answer

einen neuen Zugriffstoken mit Aktualisierungs-Token erhalten
Verwandte Themen