Выход из системы клиента не работает. Сервер идентификации 4

В настоящее время я реализую сервер OAuth с IdentityServer4 с использованием .NET Core 3.1 и React для клиентского SPA.

Когда я нажимаю кнопку выхода, я получаю следующее:  введите описание изображения здесь

React JS:

   const handleLogout = async () => {
    const token = sessionStorage.getItem("id_token");
    userManager.signoutRedirect({
      id_token_hint: token
    });
   };

IdentityServer4 Конфигурация:

   new Client
        {
            ClientId = _mobileAuthorizationCodeClientId,
            ClientName = _mobileAuthorizationCodeClientName,
            AllowedGrantTypes = GrantTypes.Code,
            RequirePkce = true,
            RequireClientSecret = false,
            RequireConsent = false,
            AllowAccessTokensViaBrowser = true,
            AllowOfflineAccess = true,
            
            AllowedScopes =
            {
                _avlApi, _clearingApi, _reportingApi, _assetManagementApi, _ticketingApi,
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile,
                IdentityServerConstants.StandardScopes.OfflineAccess,
            },

            RedirectUris = { "https://localhost:3000/signin-callback" },
            PostLogoutRedirectUris = { "https://localhost:3000/signout-callback" },
            AllowedCorsOrigins = { "https://localhost:3000" },
        },

Startup.cs соответствующие части:

        services.AddIdentity<ApplicationUser, IdentityRole>(config =>
        {
            config.Password.RequiredLength = 4;
            config.Password.RequireDigit = false;
            config.Password.RequireNonAlphanumeric = false;
            config.Password.RequireUppercase = false;
        })
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

        services.AddIdentityServer(options =>
            {
                options.IssuerUri = publicOrigin;
                options.PublicOrigin = publicOrigin;
                options.UserInteraction = new UserInteractionOptions()
                {
                    LogoutUrl = "/account/logout",
                    LoginUrl = "/account/login",
                    LoginReturnUrlParameter = "returnUrl",
                    CustomRedirectReturnUrlParameter = "returnUrl",
                };
            })
            .AddAspNetIdentity<ApplicationUser>() 
            .AddInMemoryIdentityResources(Config.GetResources())
            .AddInMemoryApiResources(Config.GetApis())
            .AddInMemoryClients(Config.GetClients())
            .AddDeveloperSigningCredential()
            .AddProfileService<IdentityProfileService>();

        services.AddAuthentication();

Я не вижу журналов ошибок от IDP. Я попытался найти решение подобной проблемы. https://github.com/IdentityServer/IdentityServer4/issues/3854

Странная вещь. Если подключение / завершение сеанса не отменено - выход работает должным образом.

Мы используем https://github.com/maxmantz/redux-oidc для клиентской реакции js.

Версии:

<PackageReference Include="IdentityServer4" Version="3.1.3" />
<PackageReference Include="IdentityServer4.AspNetIdentity" Version="3.1.3" />

Вопрос: почему отменяется подключение / завершение сеанса?

Любая информация будет принята с благодарностью!


person AlexZholob    schedule 03.12.2020    source источник


Ответы (1)


Вам не хватает ожидания в строке ниже?

ожидание userManager.signoutRedirect ({id_token_hint: token});

обычно запросы отменяются, когда пользователь перенаправляется на новую страницу, я вижу последующий вызов после авторизации отмененного вызова, который перенаправит пользователя ...

надеюсь, добавление await может решить проблему.

person hashbytes    schedule 10.12.2020