Добавить претензии к запросу UserPrincipal в ядре dotnet - PullRequest
0 голосов
/ 11 июня 2019

Я сделал нечто похожее на это несколько лет назад, но не могу найти свой код для этого и не могу вспомнить, как я это сделал!

У меня есть запрос, который уже аутентифицированно токен не содержит конкретного требования, которое мне требуется.Используя промежуточное ПО, я хочу прочитать идентификатор пользователя в токене (который уже существует) и добавить дополнительную заявку к UserPrincipal из внешнего источника на основе этого идентификатора пользователя.Обратите внимание, что я не хочу манипулировать токеном, который необходимо отправить обратно, это просто в контексте API.

Я хочу сделать это так, чтобы мой контроллер имел доступ к этому заявлению без необходимости явного запросаэто, это должно присутствовать для начала.

Я считаю, что я создал промежуточное программное обеспечение, которое добавляет заявку, но я не вижу никаких примеров, связанных с добавлением заявки, при поиске это больше связано с обновлением заявок вфактический токен отправлен обратно, а это не то, что я хочу.

1 Ответ

0 голосов
/ 12 июня 2019

Чтобы добавить претензии к пользователю после аутентификации, предпочтительным способом для .NET Core 2.x является использование IClaimsTransformation , у которого есть единственный метод TransformAsync(ClaimsPrincipal).

1.Создать CustomClaimsTransformer

public class CustomClaimsTransformer : IClaimsTransformation
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public CustomClaimsTransformer(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {

            var accesToken = _httpContextAccessor.HttpContext.Request.Headers["Authorization"];
            // get user id from token 
            //...
            //add claims here 
            ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("type-x","value-x"));

        return Task.FromResult(principal);
    }
}

2. Зарегистрируйте его в ConfigureServices:

public void ConfigureServices(IServiceCollection services)
    {
        services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddTransient<IClaimsTransformation, CustomClaimsTransformer>();
        //...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...