Заполнение и доступ к ClaimsIdentity в ASP.NET Core - PullRequest
0 голосов
/ 12 июня 2018

У меня есть приложение .NET Core 2.1, в котором у меня есть обработчик аутентификации, который я использую для извлечения значения заголовка.

Как мне добавить это значение в свой ClaimsIdentity и как я могу затем получить доступэто из моего контроллера?

У меня есть следующий код, который работает со всеми действиями моего контроллера:

public class CustomAuthHandler : AuthenticationHandler<CustomAuthOptions>
{
    public CustomAuthHandler(IOptionsMonitor<CustomAuthOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
        : base(options, logger, encoder, clock)
    {
    }

    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        // Get Authorization header value
        if (!Request.Headers.TryGetValue(HeaderNames.Authorization, out var authorization))
        {
            return Task.FromResult(AuthenticateResult.Fail("Cannot read authorization header."));
        }

        var key = authorization.FirstOrDefault() ?? "";

        var token = JsonConvert.DeserializeObject<Token>(authorization);

        var identities = new List<ClaimsIdentity> { new ClaimsIdentity("custom auth type") };
        var ticket = new AuthenticationTicket(new ClaimsPrincipal(identities), Options.Scheme);

        return Task.FromResult(AuthenticateResult.Success(ticket));
    }
}

Я думаю, что мне нужно сделать, это передать мою переменную токена в мой ClaimsIdentity?Если да, то как мне это сделать, и как мне получить доступ к своим утверждениям с моего контроллера API?

1 Ответ

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

Вы не добавляете никаких претензий к своей личности и возвращаете несколько идентификаторов в качестве бонуса.

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

var claims = new[]
{
    new Claim("myClaimName","valueExtractedFromToken")
};

var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, context.Scheme.Name));
var ticket = new AuthenticationTicket(validateCertificateContext.Principal, Scheme.Name);
return AuthenticateResult.Success(ticket);

Есть пара примеров на https://github.com/blowdart/idunno.Authentication,, где я иллюстрирую базовую аутентификацию и аутентификацию сертификата.

Если аутентификация обрабатывается чем-то другим, и вы просто хотите добавить заявку (например, у вас есть cookie-аутентификация, то в классе опций для каждого обработчика есть события, где вы можете добавить свой собственный код после аутентификацииработает, где вы можете добавить претензию к существующей личности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...