OpenIdConnectEvents中的AuthenticationValidated事件在AspNetCore 1.1中不存在,那么我应该在哪里添加声明客户端

Nos*_*gUK 2 c# openid asp.net-core-mvc identityserver4

我使用IdentityServer4和OpenId来验证我的MVC应用程序中的用户,并希望添加我自己的声明.但我不确定哪个OpenIdConnectEvents我应该这样做.

教程说我......

在身份验证流程中,您可能希望修改从IDP获得的声明.在ASP.NET Core 1.0中,您可以从OpenID Connect中间件在AuthenticationValidated事件中执行声明转换.

您在AuthenticationValidated期间添加的任何声明都存储在会话身份验证cookie中.

但是,此事件在ASP.NET Core 1.1中不可用

我试图在TokenValidated事件中做到这一点..

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

但是当我在身份验证后列出用户声明时,它未列出.

@foreach (var claim in User.Claims)
{
    <dt>@claim.Type</dt>
    <dd>@claim.Value</dd>
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*iey 9

您使用该TokenValidated事件的方法似乎是正确的,但是您尝试添加声明的方式是错误的.

此时,在身份验证过程中,用户仍未进行身份验证.OpenID Connect中间件仍在整合所需的所有信息.然后,它会将此信息传递给Cookie中间件,该中间件将使用会话cookie实现身份验证.

我的观点是,此时不要使用context.Request.HttpContext.User,因为它不包含通过OIDC验证的用户.您可以添加声明context.Ticket.Principal.Identities.First().AddClaim,因为这是稍后将传递给Cookie中间件的标识.