2016-10-05 5 views
1

私はasp.netコアアプリケーションを持っており、アプリケーションはIdentityServer3を使用してOpenIdConnect認証を使用しています。ユーザーが正常に認証されると、アプリケーションはIDサーバーから適切なクレームを受け取ります。 TokenValidatedContext.Ticket.Principal.Claimsの行をデバッグしてOnTokenValidatdに書き込んで、アプリケーションがすべてのクレームを受け取れるようにしてください。私はホームコントローラにUser.CliamsをデバッグするときASP.NET CoreがなぜUser.Claimsプロパティにクレームを2回追加するのですか?

コードスニペット以下

var connectOptions = new OpenIdConnectOptions() 
     { 
      AutomaticAuthenticate = true, 
      AutomaticChallenge = true, 
      Authority = authority, 
      ClientId = clientId, 
      ResponseType = IdentityConstant.IdTokenClaim, 
      AuthenticationScheme = IdentityConstant.OpenIdAuthenticationScheme, 
      SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme, 
      PostLogoutRedirectUri = postlogoutRedirectUri, 
      CallbackPath = IdentityConstant.CallbackPath, 
      Events = new OpenIdConnectEvents() 
      { 
       OnTokenValidated = async context => 
       { 
        var claims = context.Ticket.Principal.Claims; 
        await Task.FromResult(0); 
       } 
      } 
     }; 

は、認証が成功した後、

enter image description here

しかしOnTokenValidatedハンドラでTokenValidatedContext.Ticket.Principal.Claimsの迅速な腕時計ですが、私はすべての請求を参照してください2回加える。
以下はホームコントローラクレームはUser.Claimsで二回追加取得しているのはなぜ

​​

User.Claimsの速い時計はありますか?

+0

クレームが重複している様子はわかりません... – DForck42

答えて

3

openidconnectのAutomaticAuthenticateをtrueに設定しているためです。ユーザーIDを調べると、2つのID(openidconnect認証用のcookie以外のもの)があることがわかります。 User.ClaimsはこれらのIDクレームの合計であるため、クレームは2回表示されます。ですから、openidconnectオプションからAutomaticAuthenticate = true,を削除することで問題は解決します。

+0

OpenIdConnectOptionsから 'AutomaticAuthenticate = true'を削除し、CookieAuthenticationのために残しました。 – LP13

関連する問題