web-dev-qa-db-fra.com

Identity Server 4 Renouveler silencieux ErrorResponse: login_required

J'ai cloné le repo de l'exemple Exemple de Redux-Oidc et cela fonctionne pour la plupart, mais après quelques heures, il donne l'erreur suivante:

ACTION CHAUSSANCE: ERORORRESPONSE: LOGIN_REQUIRED
[.____] au nouveau E (OIDC-Client.min.js: 1)
à t [comme _processsigninparams] (OIDC-Client.min.js: 1)
[.____] à T [comme validatestInResponse] (OIDC-Client.min.min.js: 1)
[.____] à oidc-client.min.js: 1

Usermanager.js ressemble à ceci:

const userManagerConfig = {
  client_id: 'js.dev',
  client_secret: 'secret',
  redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/callback`,
  response_type: 'id_token token',
  scope: 'openid email profile role offline_access',
  authority: 'http://localhost:8080',
  silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/silent_renew.html`,
  automaticSilentRenew: true,
  filterProtocolClaims: true,
  loadUserInfo: true
};

et ma configuration d'identité Server:

{
        "Enabled": true,
        "ClientId": "js.dev",
        "ClientName": "Javascript Client",
        "ClientSecrets": [ { "Value": "K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=" } ],
        "AllowedGrantTypes": [ "implicit", "authorization_code" ],
        "AllowedScopes": [ "openid", "email", "profile", "role", "offline_access" ],
        "AllowOfflineAccess": true,
        "AllowAccessTokensViaBrowser":true,
        "RedirectUris": [
          "http://localhost:8081/callback",
          "http://localhost:8081/silent_renew.html"
        ],
        "PostLogoutRedirectUris": [
          "http://localhost:8081"
        ],
        "AccessTokenLifetime": 900,
        "RequireConsent": false
      }

J'ai remarqué qu'avec la dernière réponse valide, une réponse de cookie (IDSRV.Session) avec une valeur vide avec la date d'expiration définie à l'année précédente:

idsrv.session cookie

Je crois que c'est la cause fondamentale de la question, je l'ai recherchée sur la répétition de GitHub associée et j'ai essayé d'ajouter le cookie.samesite à aucun, mais cela n'a pas aidé:

services.AddAuthentication()
                .AddSaml(Configuration,externalProviders.UseSaml)
                .AddCookie(options => {
                    options.SlidingExpiration = true;
                    options.ExpireTimeSpan = TimeSpan.FromDays(30);
                    options.Cookie.SameSite = SameSiteMode.None;
                });

Une idée!

7
Attiqe

Après avoir cherché le Identity Server 4 Repo , j'ai apporté les modifications suivantes à mon code:

services.AddIdentityServer(options=>
                {
                    options.Authentication.CookieLifetime = TimeSpan.FromDays(30);
                    options.Authentication.CookieSlidingExpiration = true;
                })
                .AddProfileService<ProfileService>()
                .AddSigningCertificate(Configuration)
                .AddInMemoryClients(Configuration.GetSection("IdentityServer:Clients"))
                .AddInMemoryIdentityResources(Resources.GetIdentityResources());

Cela a commencé à travailler après, mais vous devriez vous connecter à nouveau après la fermeture du navigateur ou que vous avez rouvert un nouvel onglet, je suppose que c'est à cause de la séance .

2
Attiqe

Lorsque la session expire la signature-rappel est Beign appelée par STS ayant un paramètre de requête appelé "erreur" avec la valeur 'login_required'.

Dans la signature-rappel, avant de terminer la signature, vous pouvez rechercher ce paramètre de requête et s'il est trouvé, vous pouvez vous identifier également à partir de votre client Web. enter image description here

0
Rami