2017-01-03 2 views
2

IdentityServer4와 OpenId를 사용하여 MVC 응용 프로그램에서 사용자를 인증하고 본인 소유의 클레임을 추가하려고합니다. 그러나 나는이 작업을 수행해야 OpenIdConnectEvents의 모를입니다.OpenIdConnectEvents의 AuthenticationValidated 이벤트가 AspNetCore 1.1에 존재하지 않습니다. 클레임 클라이언트 측을 어디에 추가해야합니까?

tutorial 내가 그런를 말한다 ... 인증 흐름 동안

, 당신은 당신이 IDP에서 얻을 주장을 수정 할 수 있습니다 . ASP.NET Core 1.0에서는 OpenID Connect 미들웨어의 AuthenticationValidated 이벤트 내에서 클레임 변환을 수행 할 수 있습니다.

AuthenticationValidated 중에 추가하는 모든 클레임은 세션 인증 쿠키에 저장됩니다.

그러나이 이벤트는 1.1

내가 있습니다 .. TokenValidated 이벤트

var principal = context.Request.HttpContext.User; 
principal.Identities.First().AddClaim(new Claim("TenantId", user.TenantId.ToString())); 

을 그것을 위해 노력했다 ASP.NET 코어에서 사용할 수 없습니다하지만 인증 후 사용자의 주장을 나열 할 때 그것은 목록에 없습니다. TokenValidated 이벤트를 사용

@foreach (var claim in User.Claims) 
{ 
    <dt>@claim.Type</dt> 
    <dd>@claim.Value</dd> 
} 

답변

8

당신의 접근 방식이 올바른 것, 당신이 주장을 추가하려고하지만 방법이 잘못되었습니다.

인증 프로세스의이 시점에서 사용자는 여전히 인증되지 않습니다. OpenID Connect 미들웨어는 여전히 필요한 모든 정보를 모으고 있습니다. 그런 다음이 정보를 세션 쿠키로 인증을 구체화 할 쿠키 미들웨어로 전달합니다.

요점은 OIDC를 통해 인증 된 사용자가 포함되어 있지 않기 때문에 현재로서는 context.Request.HttpContext.User을 사용하지 마십시오. 나중에 context.Ticket.Principal.Identities.First().AddClaim과 함께 클레임을 추가 할 수 있습니다. 이는 쿠키 미들웨어에 나중에 전달 될 ID이기 때문입니다.

관련 문제