2017-10-12 18 views
3

Quelle est la méthode correcte pour actualiser le IdentityToken. Nous utilisons le flux implicite.L'utilisateur n'est pas authentifié lorsque IdentityTokenLifetime expire

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 par défaut à 300 (= 5 minutes). Lorsque ce délai expire, l'utilisateur n'est plus authentifié. Devrions-nous retourner un statut 401 (et passer prompt=none), de sorte que le middleware redirige vers IdentityServer3 et vice-versa? Y a-t-il un autre moyen?

Répondre

0

En théorie:

  1. Vous pouvez augmenter ttl des cookies, lorsque l'utilisateur est connecté par OpenId et authentifier l'utilisateur par ce cookie. Si le cookie expire, vous pouvez renvoyer 401 ou rediriger pour vous reconnecter.
  2. Le serveur d'identité doit fournir un jeton d'actualisation (par api), qui permet d'obtenir un autre jeton d'accès si nécessaire.
  3. Une autre pensée: habituellement, jeton d'accès ne fournit que pour la période de temps limitée pour des raisons de sécurité
0

Par défaut, le middleware ASP.NET OIDC OWIN utilise la durée de vie jeton d'identité comme la durée de vie du cookie de votre application problème. Cela semble être une suspension du middleware WS-Federation OWIN, où le jeton entrant est beaucoup plus vécu. Étant donné que les jetons d'identité sont de courte durée et qu'ils ne sont généralement utilisés qu'une seule fois, puis supprimés, ce comportement ne fonctionne pas vraiment pour OpenID Connect.

Alors vous avez deux options:

  1. Définir la durée de vie jeton d'identité beaucoup plus élevé pour ce client dans IdentityServer (en utilisant la propriété IdentityTokenLifetime sur l'entité Client).
  2. Arrêtez le middleware OIDC d'utiliser la durée de vie du jeton d'identité en tant que durée de vie du cookie. Cela permettra à votre cookie middelware de contrôler la durée de vie de la session.

Vous pouvez le faire en réglant le UseTokenLifetime false:

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

Tout changement que vous jetez un oeil à ceci: https://stackoverflow.com/questions/46867531/identityserver4-has-to -authentifier-deux fois – stt106