2 votes

IdentityServer4 - LogoutRequest.PostLogoutRedirectUri est nul

J'ai un projet de serveur d'identité sur lequel je travaille et pour une raison quelconque, l'URL de déconnexion est définie comme null. En utilisant la fonction "BuildLogoutViewModelAsync(logoutId)" trouvée dans le QuickStart, cette ligne renvoie null, mais dans le journal le "post_logout_redirect_uri" est défini et correctement configuré.

var context = await this.interactionService.GetLogoutContextAsync(logoutId);

Voici les informations nécessaires du fichier journal.

2018-06-11T16:11:27.1301566-04:00 0HLEFQTLST4A2:00000006 [INF] Le service de profil a renvoyé les types de revendications suivants : "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress name given_name email UserId PayeeId ErpPayeeId MyReports PipelineCRM Start Start IdentityManager SpecialOrder MarketingEmail PunchOut CustomerEntityManager AttributeManager SpecialOrdersLite PayeeManagement VirtualVideoTraining MySurveys NAMToolkit Dashboard FrameworkManager FrameworkManager ContractManagement SalesDashboard HRSInstallationLeadForm PunchoutManagement CompetitiveIntelligence SpecialOrderRequest LuceneIndexSearch CompetitiveIntelligence PKB CompetitiveIntelligence CompetitiveIntelligence CompetitiveIntelligence PKB SpecialOrderRequestPOC AppsManagement Genie Testing1234 October Deviation ReportDeliveryManagement ReportDeliveryManagement RgTest TestingUpdates1 TrainingDemo ABCDE CustomerSegmentationManager CustomerSegmentationManager TestingTemplate2 AppsMgmt AppsMgmt AppsMgmt InventoryControlWorkflow ProPurchaseCardMaint" (a9217bec)
2018-06-11T16:11:27.1354674-04:00 0HLEFQTLST4A2:00000006 [INF] Requête terminée en 1263.2834ms 200 application/json; charset=UTF-8 (791a596a)
2018-06-11T16:11:29.9711755-04:00 0HLEFQTLST4A1:00000007 [INF] Requête de démarrage HTTP/1.1 GET http://localhost:44329/connect/endsession?post_logout_redirect_uri=http%3A%2F%2Flocalhost%3A21402%2Fsignout-callback-oidc&state=CfDJ8A54aiN-IdtIpcL6PAgpJbMSpzMkkd27BJqnGFbTgRwiqdf1XkpfMApJnfC0_3BOsVALgr2skPwBmy74ToICvY6ZjWsd4BJLHkVqJD9Cp45zXBKH37iX2o2y6A8wD30yghQDcA4B2iPHg6eAjliWN4h8jv3PdlE_gjIKiNY-Eckk&x-client-SKU=ID_NET&x-client-ver=2.1.4.0   (ca22a1cb)
2018-06-11T16:11:29.9738375-04:00 0HLEFQTLST4A1:00000007 [INF] AuthenticationScheme : "idsrv" a été authentifié avec succès. (1805f3b3)
2018-06-11T16:11:29.9759119-04:00 0HLEFQTLST4A1:00000007 [INF] AuthenticationScheme : "idsrv" a été authentifié avec succès. (1805f3b3)
2018-06-11T16:11:29.9796082-04:00 0HLEFQTLST4A1:00000007 [INF] Invocation du point de terminaison IdentityServer : "IdentityServer4.Endpoints.EndSessionEndpoint" pour "/connect/endsession" (f7642de5)
2018-06-11T16:11:29.9963239-04:00 0HLEFQTLST4A1:00000007 [INF] Validation de la requête de fin de session réussie
"{
  \"SubjectId\": \"MOORESTOWN\\rpannell1\",
  \"Raw\": {
    \"post_logout_redirect_uri\": \"http://localhost:21402/signout-callback-oidc\",
    \"state\": \"CfDJ8A54aiN-IdtIpcL6PAgpJbMSpzMkkd27BJqnGFbTgRwiqdf1XkpfMApJnfC0_3BOsVALgr2skPwBmy74ToICvY6ZjWsd4BJLHkVqJD9Cp45zXBKH37iX2o2y6A8wD30yghQDcA4B2iPHg6eAjliWN4h8jv3PdlE_gjIKiNY-Eckk\",
    \"x-client-SKU\": \"ID_NET\",
    \"x-client-ver\": \"2.1.4.0\"
  }
}" (8a893fca)
2018-06-11T16:11:30.0114218-04:00 0HLEFQTLST4A1:00000007 [INF] Requête terminée en 40.0686ms 302  (791a596a)
2018-06-11T16:11:30.0233725-04:00 0HLEFQTLST4A2:00000007 [INF] Requête de démarrage HTTP/1.1 GET http://localhost:44329/account/logout?logoutId=CfDJ8Lr1ecTh1x5IjvA0NxR18eixqgY1PROntfeC5wQJbnQmhM8qTPkm3Dt4ckYZ5sm1NFGrcOh2t67DG6X5buzj8klwDUz8rXzYBIFoTpxIKk4Zi-BhQIimvGKeukPMtgodz16q47X8PTqvaq0TIPLNPvl-QEh54ZZBafc9lk0amvlttW4CPfGGwoCpUJV_vwt9n6B7uu4_WEKaX65qF8O0vu7f-i-IZ_up2T19USJoZMSmy5uRo7-ZpReWgMfB6Ym2jOrWYA2KQBlKgczfmAWyj7eGbz0jRXecCbgcqwIVfVHsgWGL4-DdvM44YG7mp7-AvJAQ1ZOeLT2ootHcwt_ulYNb_zsy-OCT-XdblPBGAXuLqzuTuvEpbkUnF0cE2Amltwmq_ZWc89GK9QG_Ectubzl23k3S0oJ0AjHFSXCezPm61nRjiKhLtY6O1soIgLzSv_NyjdwQIbmJByiBv1NsH7I   (ca22a1cb)
2018-06-11T16:11:30.0259399-04:00 0HLEFQTLST4A2:00000007 [INF] AuthenticationScheme : "idsrv" a été authentifié avec succès. (1805f3b3)
2018-06-11T16:11:30.0280733-04:00 0HLEFQTLST4A2:00000007 [INF] AuthenticationScheme : "idsrv" a été authentifié avec succès. (1805f3b3)
2018-06-11T16:11:30.0356306-04:00 0HLEFQTLST4A2:00000007 [INF] Exécution de la méthode d'action "IBI.Login.Service.Controllers.AccountController.Logout (IBI.Login.Service)" avec les arguments (["CfDJ8Lr1ecTh1x5IjvA0NxR18eixqgY1PROntfeC5wQJbnQmhM8qTPkm3Dt4ckYZ5sm1NFGrcOh2t67DG6X5buzj8klwDUz8rXzYBIFoTpxIKk4Zi-BhQIimvGKeukPMtgodz16q47X8PTqvaq0TIPLNPvl-QEh54ZZBafc9lk0amvlttW4CPfGGwoCpUJV_vwt9n6B7uu4_WEKaX65qF8O0vu7f-i-IZ_up2T19USJoZMSmy5uRo7-ZpReWgMfB6Ym2jOrWYA2KQBlKgczfmAWyj7eGbz0jRXecCbgcqwIVfVHsgWGL4-DdvM44YG7mp7-AvJAQ1ZOeLT2ootHcwt_ulYNb_zsy-OCT-XdblPBGAXuLqzuTuvEpbkUnF0cE2Amltwmq_ZWc89GK9QG_Ectubzl23k3S0oJ0AjHFSXCezPm61nRjiKhLtY6O1soIgLzSv_NyjdwQIbmJByiBv1NsH7I"]) - Le modèle d'état est valide (ba7f4ac2)

J'utilise le MVCHybrid de la solution d'exemples avec cette configuration dans le client.

services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie(options =>
    {
        options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
        options.Cookie.Name = "mvchybrid";
    })
    .AddOpenIdConnect("oidc", options =>
    {
        // options.SignInScheme = "mvchybrid";
        options.Authority = "https://localhost:44329/";
        options.RequireHttpsMetadata = false;
        options.ClientSecret = "superSecretPassword";
        options.ClientId = "webFrameworkOpenIdClient";
        options.Resource = "openid profile api1 offline_access";
        options.ResponseType = "code id_token token";
        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        // options.Scope.Add("email");
        options.Scope.Add("api1");
        options.Scope.Add("offline_access");
        options.GetClaimsFromUserInfoEndpoint = true;
        options.SignedOutRedirectUri = "http://localhost:21402/";
        // options.SaveTokens = true;

        options.TokenValidationParameters = new TokenValidationParameters
        {
            NameClaimType = JwtClaimTypes.Name,
            RoleClaimType = JwtClaimTypes.Role,
        };
    });

Le résultat de l'action Logout de MvcHybrid ressemble à ceci

public IActionResult Logout()
{
    return new SignOutResult(new[] { "Cookies", "oidc" });
}

L'URL est dans la base de données et est configurée à la fois en http://localhost:21402/ et en http://localhost:21402/signout-callback-oidc pour être sûr que les deux sont disponibles.

Est-ce que quelqu'un peut me donner des idées sur la manière de configurer correctement cela ? D'après tout ce que je vois, les données sont configurées correctement et les données passent correctement par le réseau.

Des idées ?

1voto

Rodney Pannell Points 83

J'ai trouvé, la configuration était incorrecte. Le SaveTokens = true qui enverra l'id_token via la chaîne de requête.

.AddOpenIdConnect("oidc", options =>
{
    options.Authority = "https://localhost:44329/";
    options.RequireHttpsMetadata = false;
    options.ClientSecret = "superSecretPassword";
    options.ClientId = "webFrameworkOpenIdClient";
    options.Resource = "openid profile api1 offline_access";
    options.ResponseType = "code id_token token";
    options.Scope.Clear();
    options.Scope.Add("openid");
    options.Scope.Add("profile");
    options.Scope.Add("api1");
    options.Scope.Add("offline_access");
    options.GetClaimsFromUserInfoEndpoint = true;
    options.SignedOutRedirectUri = "http://localhost:21402/";
    /* ICI */
    options.SaveTokens = true;
    /* ICI */
    options.TokenValidationParameters = new TokenValidationParameters
    {
        NameClaimType = JwtClaimTypes.Name,
        RoleClaimType = JwtClaimTypes.Role,
    };
});

J'avais un problème précédent où la chaîne de requête était trop importante en raison du nombre de revendications que mon utilisateur aura. En accédant au web.config dans la solution du serveur d'identité, j'ai mis à jour le paramètre maxQueryString à un nombre extrêmement important. La valeur par défaut est de 2048 et mon jeton avait plus de 3000 caractères. Cela permet à la le paramètre id_token_hint d'être envoyé, ce qui est nécessaire pour qu'une post_logout_redirect_uri soit prise en compte. Voir le nouvel enregistrement de journal ci-dessous.

2018-06-12T11:54:48.6190847-04:00 0HLEGFIG5NHS6:0000000A [INF] Validation de la requête de fin de session réussie
"{
  \"ClientId\": \"webFrameworkOpenIdClient\",
  \"ClientName\": \"Client pour le Framework de l'Application Web IBI\",
  \"SubjectId\": \"MOORESTOWN\\rpannell1\",
  \"PostLogOutUri\": \"http://localhost:21402/signout-callback-oidc\",
  \"State\": \"CfDJ8A54aiN-IdtIpcL6PAgpJbOn0XeMop9RKInYCbgTcAxYu2fkXOF7qQrgD8XAilOa4LsQSm7kC40OxybIKAnhMWS3EY_4bHadBJ8yMwUFhNbAB5p6AAggJi_Jvm7ewcoRG_gi0xshxzZ9df4aAemnJpDl0KePcJIq1E-SCH9LTVkh\",
  \"Raw\": {
    \"post_logout_redirect_uri\": \"http://localhost:21402/signout-callback-oidc\",
    \"id_token_hint\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjA4MDI3ZjIyMDM1NmQzNTIyNDkzNWU4ZDIxY2RhMGVkIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1Mjg4MTg4ODMsImV4cCI6MTUyODgxOTE4MywiaXNzIjoiaHR0cHM6Ly9sb2NhbGhvc3Q6NDQzMjkiLCJhdWQiOiJ3ZWJGcmFtZXdvcmtPcGVuSWRDbGllbnQiLCJub25jZSI6IjYzNjY0NDE1NjY1OTMxNTQ2MS5NR1ZqWkdZMk56QXRPV016WlMwME5UYzRMV0kzWldJdE5qRXhZVGRrTmpNNFltSXpPRGhqWmpFeFpXSXROemRtWWkwMFpXWTJMVGd5TW1VdFl6NU5EY_4bHadBJIq1ETC1TVkh\",
    \"Raw\": {
      ...
    }
}" (8a893fca)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X