Событие AuthenticationValidated в OpenIdConnectEvents не существует в AspNetCore 1.1, поэтому куда мне добавлять утверждения на стороне клиента

Я использую IdentityServer4 и OpenId для аутентификации пользователей в моем приложении MVC и хочу добавить свои собственные утверждения. Но я не уверен, в каком из OpenIdConnectEvents мне следует это сделать.

В этом руководстве говорится, что ...

В процессе аутентификации вы можете изменить утверждения, которые вы получаете от IDP. В ASP.NET Core 1.0 вы можете выполнять преобразование утверждений внутри события AuthenticationValidated из промежуточного программного обеспечения OpenID Connect.

Любые утверждения, которые вы добавляете во время AuthenticationValidated, хранятся в файле 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>
}

person NoseBagUK    schedule 03.01.2017    source источник


Ответы (1)


Ваш подход к использованию события TokenValidated кажется правильным, однако способ добавления претензии неверен.

На этом этапе процесса аутентификации пользователь все еще не аутентифицирован. Промежуточное ПО OpenID Connect все еще собирает всю необходимую информацию. Затем он передаст эту информацию промежуточному программному обеспечению файлов cookie, которое материализует аутентификацию с помощью сеансового файла cookie.

Я хочу сказать, что не используйте context.Request.HttpContext.User на этом этапе, потому что он не содержит пользователя, аутентифицированного через OIDC. Вы можете добавить утверждение с context.Ticket.Principal.Identities.First().AddClaim, поскольку это идентификатор, который будет передан промежуточному программному обеспечению файлов cookie позже.

person Mickaël Derriey    schedule 07.01.2017