Как получить текущий User / ClaimsPrincipal в Middleware. Net Core Web API - PullRequest
1 голос
/ 07 апреля 2020

Мне нужно получить доступ к утверждениям текущего пользователя в Middleware до того, как запрос отправит какие-либо контроллеры.

При входе в систему я установил подобные утверждения.

new Claim(ClaimTypes.NameIdentifier, user.ID.ToString()),

    public async Task InvokeAsync(HttpContext httpContext)
        {
           var claim = httpContext.User.FindFirst(ClaimTypes.NameIdentifier)
        }

Возвращает ноль.

Я знаю, что мы можем получить доступ к этому с помощью свойства ControllerBase.User в Controllers (которое я могу получить), но мне нужно получить к нему доступ в Middleware.

Есть ли способ достичь этого?

Я что-то не так делаю?

1 Ответ

1 голос
/ 07 апреля 2020

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

Это зависит от порядка регистрации промежуточного программного обеспечения.

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

User устанавливается промежуточным ПО для аутентификации, поэтому убедитесь, что ваше специальное промежуточное ПО зависит от наличия User зарегистрировано после промежуточного программного обеспечения (ов) аутентификации

//...

app.UseAuthentication();
app.UseAuthorization();
// app.UseSession();

app.AddCustomMiddleware();

//...

Ссылка ASP. NET Промежуточное программное обеспечение ядра

...