2017-10-12 41 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. 你可以增加饼的TTL,当用户通过OpenID的登录,并通过此cookie验证用户。如果cookie过期,那么您可以返回401或重定向以再次登录。
  2. 身份服务器应该提供刷新令牌(通过api),如果需要,该令牌用于获取另一个访问令牌。
  3. 另一种思考:通常情况下,访问令牌只对由于安全原因,时间有限的时间
0

默认情况下,ASP.NET OIDC OWIN中间件使用的身份令牌生存的饼干您的应用的生命周期提供问题。这似乎是来自WS-Federation OWIN中间件的一个悬挂,在这个中间件中,传入令牌的寿命更长。由于身份令牌是短暂的,通常只使用一次然后丢弃,这种行为对于OpenID Connect并不适用。

所以,你有两个选择:

  1. 将身份令牌生存多的内IdentityServer该客户端(使用上Client实体IdentityTokenLifetime属性)高。
  2. 停止OIDC中间件使用身份令牌生存期作为Cookie生存期。这将允许您的cookie middelware控制会话生存期。

您可以通过UseTokenLifetime设置为false做到这一点:

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

任何改变,你会看看这个:https://stackoverflow.com/questions/46867531/identityserver4-has-to -authenticate-两次 – stt106

相关问题