У меня есть приложение Identity server 4, в которое я пытаюсь войти, используя свое приложение Xamarin.forms с использованием PKCE. Я продолжаю получать сообщение об ошибке от сервера идентификации, которого раньше не видел. code_challenge is missing
Я предполагаю, что использую неправильный тип гранта, но во всей документации, которую я нашел для Xamarin, говорится, что я должен использовать этот.
Как подключить Xamarin к Identity Server 4?
Ошибка
fail: IdentityServer4.Validation.AuthorizeRequestValidator[0] code_challenge is missing { "ClientId": "xamarin", "ClientName": "eShop Xamarin OpenId Client", "RedirectUri": "1046123799103-h63f9o1cnj78fo26okng1aacr9e89u2e:/oauth2redirect", "AllowedRedirectUris": [ "http://localhost:5001/signin-oidc" ], "SubjectId": "anonymous", "ResponseType": "code", "ResponseMode": "query", "GrantType": "authorization_code", "RequestedScopes": "", "State": "egfczresvcjyeerw", "Raw": { "client_id": "xamarin", "redirect_uri": "1046123799103-h63f9o1cnj78fo26okng1aacr9e89u2e:/oauth2redirect", "scope": "profile openid nol_api navinfo", "response_type": "code", "state": "egfczresvcjyeerw" } }
Идентификатор клиента на сервере идентификации
new Client
{
ClientId = "xamarin",
ClientName = "eShop Xamarin OpenId Client",
AllowedGrantTypes = GrantTypes.Code,
RedirectUris = { "http://localhost:5001/signin-oidc" },
RequireConsent = false,
RequirePkce = true,
PostLogoutRedirectUris = { "http://localhost:8008/Account/Redirecting" },
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"navinfo",
$"{nolConfig.Client}_api"
},
AllowOfflineAccess = true,
AllowAccessTokensViaBrowser = true,
RequireClientSecret = false
}
код xamarin
Authenticator = new OAuth2Authenticator
(
_clientId,
_secret,
_scopes,
new Uri(_discoveryDoc.AuthorizationEndpoint),
_redirectUri,
new Uri(_discoveryDoc.TokenEndpoint),
null,
isUsingNativeUI: true
);
Если я удаляю RequirePkce = true,
из клиента на сервере идентификации, я больше не получаю рассматриваемую ошибку. Судя по тому, что мне удалось найти, Xamarin.auth еще не поддерживает PKCE. Это означает, что мне придется либо отключить его, либо реализовать самостоятельно.
Как выполнить вход на сервер идентификации 4 из форм XAmarin с включенным PKCE.