"Неожиданный code_verifier" при попытке добиться авторизации в гибридном потоке (с PKCE) с использованием IdentityServer4

Я пытаюсь реализовать собственные клиенты (сначала приложения.NET Console в качестве макета) для проверки подлинности с использованием OpenID Connect против IdentityServer4 в качестве моей STS. Я использую IdentityModel.OidcClient2 в качестве моей клиентской библиотеки.
Я решил реализовать поток аутентификации на основе кода.

Я могу пройти через этап аутентификации, но когда я перехожу к этапу авторизации, я получаю сообщение об ошибке на клиенте

invalid_grant

На IdentityServer сообщение об ошибке

"Неожиданный code_verifier: XXXXXXXXXXX...."


Хотя, когда я открываю fiddler и просматриваю запросы и информацию об отладке, верификатор кода, отправляемый IdentityServer для авторизации, выглядит как клиент, сгенерированный сначала в AuthorizationState учебный класс.
Если я выполню с AuthorizationState.CodeVerifier = null тогда это работает.
Но я хочу реализовать PKCE для дополнительной безопасности. Как я могу этого достичь?

Вот конфигурация этого конкретного клиента
Идентификационный сервер:

            new Client
            {
                ClientId = "nativeapp1",
                ClientName = "Native App Demo - 1",
                AllowedGrantTypes = GrantTypes.Hybrid,

                RequireConsent = true,

                ClientSecrets =
                {
                    new Secret("some-secret1".Sha256())
                },

                AllowedScopes = {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.OfflineAccess,
                    "custom.name",
                    "api1"
                },

                RedirectUris = {"http://127.0.0.1:7890/"},
                //PostLogoutRedirectUris = {"" }
                AllowOfflineAccess = true
            }

И конфигурация клиента

var options = new OidcClientOptions
        {
            Authority = _authority,
            ClientId = "nativeapp1",
            RedirectUri = redirectUri,
            Scope = "openid profile api1 custom.name offline_access",
            FilterClaims = true,
            LoadProfile = false,
            Flow = OidcClientOptions.AuthenticationFlow.Hybrid,
            ClientSecret = "some-secret1"
        };

1 ответ

Решение

Вам нужно установить RequirePkce истинно на вашей конфигурации клиента в IdentityServer.

Другие вопросы по тегам