"Неожиданный 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.