2017-09-08 11 views
0

アクセストークンが期限切れになったことをクライアントが知っているので、別のアクセストークンのリフレッシュトークンを要求しますか?アクセストークンが期限切れになっていることを知るには?

サーバAPIが401を返すと答えた場合、APIはアクセストークンの有効期限が切れていることをどのように知ることができますか?

私はIdentityServer4を使用しています。

答えて

1

あなたのapiは、含まれているベアラトークンがすでに期限切れになっている場合は、すべてのコールを拒否する必要があります。 webapiアプリの場合、IdentityServerAuthenticationOptionsが作業を行います。

しかし、あなたの呼び出し側のWebアプリケーションはあなたのaccess_tokenを生かしておく責任があります。たとえば、WebアプリケーションがASP.Netコアアプリケーションである場合は、AspNetCore.Authentication.Cookiesを使用して任意の要求を認証できます。その場合、OnValidatePrincipalイベントを介してトークン期限切れ情報に関する情報を見つけることができます。

私は別の StackOverflow answer

でリフレッシュトークンを使用して新しいアクセストークンを取得する方法についての完全な実装を追加した
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 
      } 
     } 
    } 
} 

関連する問題