PKCE を使用して Xamarin.forms アプリを使用してログインしようとしている Identity server 4 アプリケーションがあります。ID サーバーから、実際には見たことのないエラーが発生し続けます。code_challenge is missing
私は間違った付与タイプを使用していると推測していますが、Xamarin で見つけたすべてのドキュメントには、これを使用する必要があると書かれています。
Xamarin を Identity サーバー 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" } }
Identity サーバーのクライアント ID
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
);
ID サーバーのクライアントから削除する RequirePkce = true,
と、問題のエラーは発生しなくなります。私が見つけたものから、Xamarin.auth はまだ PKCE をサポートしていません。つまり、無効にするか、自分で実装する必要があります。
PKCE が有効になっている XAmarin フォームから Identity サーバー 4 にログインする方法を教えてください。