アクセストークンが期限切れになったことをクライアントが知っているので、別のアクセストークンのリフレッシュトークンを要求しますか?アクセストークンが期限切れになっていることを知るには?
サーバAPIが401を返すと答えた場合、APIはアクセストークンの有効期限が切れていることをどのように知ることができますか?
私はIdentityServer4を使用しています。
アクセストークンが期限切れになったことをクライアントが知っているので、別のアクセストークンのリフレッシュトークンを要求しますか?アクセストークンが期限切れになっていることを知るには?
サーバAPIが401を返すと答えた場合、APIはアクセストークンの有効期限が切れていることをどのように知ることができますか?
私はIdentityServer4を使用しています。
あなたのapiは、含まれているベアラトークンがすでに期限切れになっている場合は、すべてのコールを拒否する必要があります。 webapiアプリの場合、IdentityServerAuthenticationOptions
が作業を行います。
しかし、あなたの呼び出し側のWebアプリケーションはあなたのaccess_tokenを生かしておく責任があります。たとえば、WebアプリケーションがASP.Netコアアプリケーションである場合は、AspNetCore.Authentication.Cookies
を使用して任意の要求を認証できます。その場合、OnValidatePrincipal
イベントを介してトークン期限切れ情報に関する情報を見つけることができます。
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
}
}
}
}