2016-10-05 1 views
1

asp.net 핵심 응용 프로그램이 있고 응용 프로그램이 IdentityServer3을 사용하여 OpenIdConnect 인증을 사용하고 있습니다. 사용자가 성공적으로 인증되면 응용 프로그램은 ID 서버에서 적절한 클레임을받습니다. TokenValidatedContext.Ticket.Principal.Claims 라인을 디버그하여 OnTokenValidatd에 등록하고 애플리케이션이 모든 클레임을 받았는지 확인하십시오. 나는 홈 컨트롤러에 User.Cliams을 디버깅 할 때ASP.NET 핵심어가 User.Claims 속성에 두 번 클레임을 추가하는 이유는 무엇입니까?

코드 조각 아래

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의 빠른 시계입니다, 나는 모든 주장을 참조 두 번 추가됩니다.
다음은 홈 컨트롤러 주장 User.Claims에 두 번 추가지고 왜

enter image description here

에서 User.Claims의 빠른 시계는?

+0

클레임이 중복 된 것을 어떻게 보는지 알 수 없습니다. – DForck42

답변

3

openidconnect의 AutomaticAuthenticate을 true로 설정했기 때문에. 사용자 ID를 보면 두 개의 ID가 있음을 알 수 있습니다 (openidconnect 인증을위한 다른 쿠키에 하나). User.Claims은 이러한 ID 클레임의 합이므로 두 번째 클레임이 표시됩니다. 따라서 openidconnect 옵션에서 AutomaticAuthenticate = true,을 제거하면 문제가 해결됩니다.

+0

OpenIdConnectOptions에서'AutomaticAuthenticate = true'를 제거하고 CookieAuthentication으로 남겨 두었습니다. – LP13

관련 문제