AspNetCore 1.1 中不存在 OpenIdConnectEvents 中的 AuthenticationValidated 事件,所以我应该在哪里添加声明客户端
AuthenticationValidated event in OpenIdConnectEvents doesn't exist in AspNetCore 1.1 so where should I add claims client side
我正在使用 IdentityServer4 和 OpenId 对我的 MVC 应用程序中的用户进行身份验证,并想添加我自己的声明。但我不确定我应该在哪个 OpenIdConnectEvents 中执行此操作。
这个tutorial说我那个...
During the authentication flow, you might want to modify the claims that you get from the IDP. In ASP.NET Core 1.0, you can perform claims transformation inside of the AuthenticationValidated event from the OpenID Connect middleware.
Any claims that you add during AuthenticationValidated are stored in the session authentication cookie.
但是 ASP.NET Core 1.1
中不提供此事件
我已经尝试在 TokenValidated 事件中这样做了..
var principal = context.Request.HttpContext.User;
principal.Identities.First().AddClaim(new Claim("TenantId", user.TenantId.ToString()));
但是当我在身份验证后列出用户声明时,它没有列出。
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
您使用 TokenValidated
事件的方法似乎是正确的,但是您尝试添加声明的方式是错误的。
此时在身份验证过程中,用户仍未通过身份验证。 OpenID Connect 中间件仍在将它需要的所有信息放在一起。然后它将此信息传递给 Cookies 中间件,后者将使用会话 cookie 实现身份验证。
我的观点是,此时不要使用 context.Request.HttpContext.User
,因为它不包含通过 OIDC 验证的用户。您可以添加带有 context.Ticket.Principal.Identities.First().AddClaim
的声明,因为这是稍后将传递给 Cookies 中间件的身份。
我正在使用 IdentityServer4 和 OpenId 对我的 MVC 应用程序中的用户进行身份验证,并想添加我自己的声明。但我不确定我应该在哪个 OpenIdConnectEvents 中执行此操作。
这个tutorial说我那个...
During the authentication flow, you might want to modify the claims that you get from the IDP. In ASP.NET Core 1.0, you can perform claims transformation inside of the AuthenticationValidated event from the OpenID Connect middleware.
Any claims that you add during AuthenticationValidated are stored in the session authentication cookie.
但是 ASP.NET Core 1.1
中不提供此事件我已经尝试在 TokenValidated 事件中这样做了..
var principal = context.Request.HttpContext.User;
principal.Identities.First().AddClaim(new Claim("TenantId", user.TenantId.ToString()));
但是当我在身份验证后列出用户声明时,它没有列出。
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
您使用 TokenValidated
事件的方法似乎是正确的,但是您尝试添加声明的方式是错误的。
此时在身份验证过程中,用户仍未通过身份验证。 OpenID Connect 中间件仍在将它需要的所有信息放在一起。然后它将此信息传递给 Cookies 中间件,后者将使用会话 cookie 实现身份验证。
我的观点是,此时不要使用 context.Request.HttpContext.User
,因为它不包含通过 OIDC 验证的用户。您可以添加带有 context.Ticket.Principal.Identities.First().AddClaim
的声明,因为这是稍后将传递给 Cookies 中间件的身份。