0
客戶端應該如何知道訪問令牌已過期,以便使用刷新令牌爲另一個訪問令牌發出請求?如何知道訪問令牌已過期?
如果答案是服務器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
}
}
}
}
我加入了有關如何使用刷新標記在另一個StackOverflow answer
獲得新的訪問令牌全面實施