2017-03-09 2 views
0

私は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" 
     }; 

答えて

1

:ここ

は、その特定のクライアント
アイデンティティ・サーバーの構成です。

+0

期待通りに作業しました:)この素晴らしいフレームワークもありがとうございます! – DotnetProg

関連する問題