У меня есть приложение Identity Server 4, в которое я пытаюсь войти, используя мое приложение Xamarin.forms, используя PKCE.Я продолжаю получать сообщение об ошибке от сервера идентификации, которого я на самом деле не видел раньше.code_challenge is missing
Я предполагаю, что я использую неправильный тип предоставления, но вся документация, которую я нашел для Xamarin, говорит, что я должен использовать этот.
Как подключить Xamarin к серверу удостоверений 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 code
Authenticator = new OAuth2Authenticator
(
_clientId,
_secret,
_scopes,
new Uri(_discoveryDoc.AuthorizationEndpoint),
_redirectUri,
new Uri(_discoveryDoc.TokenEndpoint),
null,
isUsingNativeUI: true
);
Если я удаляю RequirePkce = true,
с клиента на сервере идентификации, я больше не получаю соответствующую ошибку.Из того, что я смог найти, можно сказать, что Xamarin.auth пока не поддерживает PKCE.Это означает, что мне придется либо отключить его, либо внедрить самому.
Как выполнить вход в Identity Server 4 из форм XAmarin с включенным PKCE.