私はSTSとしてIdentityServer4に対してOpenID Connectを使用して認証するネイティブクライアント(最初はモックアップとして.NETコンソールアプリケーション) 。私は自分のクライアントライブラリとしてIdentityModel.OidcClient2を使用します。
コードベースの認証フローを実装することを選択しました。
は私が認証段階を通過することができていますが、私は承認段階に到達したとき、私はIdentityServerでIdentityServer4を使用してハイブリッドフロー(PKCE)で認証を取得しようとすると「Unexpected code_verifier」
invalid_grant
は、エラーメッセージがあると言って、クライアントでのエラーメッセージが表示されます
"予期しないcode_verifier:XXXXXXXXXXX ...."
フィドラーを開いてリクエストとデバッグ情報を調べても、承認のためにIdentityServerに送信されたコードベリファイアは、クライアントが最初にAuthorizationState
クラスで生成したものと思われます。
AuthorizationState.CodeVerifier = null
で実行すると動作します。
しかし、セキュリティを強化するためにPKCEを実装したいと思います。それをどうすれば実現できますか?あなたはIdentityServerであなたのクライアントの設定にtrueにRequirePkce
を設定する必要が
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"
};
期待通りに作業しました:)この素晴らしいフレームワークもありがとうございます! – DotnetProg