2017-10-12 9 views
3

IdentityTokenを更新する正しい方法は何ですか。暗黙のフローを使用しています。IdentityTokenLifetimeの有効期限が切れたときにユーザーが認証されない

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions 
    { 
     ClientId = ConfigurationManager.AppSettings["IdSrv.ClientId"], 
     Authority = ConfigurationManager.AppSettings["IdSrv.Authority"], 

     AuthenticationType = "MySTS", 

     ResponseType = "id_token token",     //Implicit Flow 

     Scope = "openid name email", 

     RedirectUri = ConfigurationManager.AppSettings["IdSrv.RedirectUri"], 
     PostLogoutRedirectUri = ConfigurationManager.AppSettings["IdSrv.PostLogoutRedirectUri"], 

     SignInAsAuthenticationType = "OAuth Bearer", 
    }); 

IdentityTokenLifetimeのデフォルト値は300(= 5分)です。その時間が経過すると、ユーザーは認証されなくなります。ステータス401(およびprompt=noneを返す)を返す必要があります。そのため、ミドルウェアはIdentityServer3にリダイレクトされ、再び戻されます。別の方法がありますか?理論的には

答えて

0

  1. あなたはユーザーがOpenIDをしてサインインすると、クッキーのTTLを増加させ、そしてこのクッキーによりユーザーを認証できます。 Cookieが期限切れになった場合は、401を返したり、リダイレクトして再度サインインしたりすることができます。
  2. 必要に応じて、別のアクセストークンを取得するために使用されたリフレッシュトークン(API別)を提供する必要があります。
  3. もう一つの思考:通常、アクセストークンは、デフォルトではセキュリティ上の理由
0

の限られた期間のためにのみ提供してASP.NET OIDC OWINミドルウェアはクッキーの寿命アプリの意志としてのアイデンティティトークン寿命を使用しています問題。これは、着信トークンがはるかに長く存続するWS-Federation OWINミドルウェアからのハングオーバーのようです。アイデンティティトークンは短期間であり、通常は一度だけ使用されて破棄されるため、この動作はOpenID Connectでは実際には機能しません。

は、だから、2つのオプションがあります。

  1. ClientエンティティにIdentityTokenLifetimeプロパティを使用して)IdentityServer内でそのクライアントのIDトークン寿命がはるかに高く設定してください。
  2. OIDCミドルウェアが、アイデンティティトークンの有効期間をCookieの有効期間として使用しないようにします。これにより、Cookieのミドルウェアでセッションの有効期間を制御できます。

あなたがfalseにUseTokenLifetimeを設定することによってこれを行うことができます。

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions { 
    // rest of your settings 
    UseTokenLifetime = false 
} 
+0

すべての変更をあなたはこのを見てみましょう:https://stackoverflow.com/questions/46867531/identityserver4-has-to -authenticate-twice – stt106

関連する問題