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