Добавление заявок с использованием канала-носителя JWT в ASP.NET Core - PullRequest
0 голосов
/ 11 июня 2019

Я использую AddJwtBearer, чтобы использовать механизм аутентификации OAuth / OpenId с моим приложением. Одна из моих потребностей - добавить конкретное утверждение после того, как пользователь вошел в систему (или токен обновился).

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

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

1 Ответ

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

То, что я ищу, это способ добавить пользовательскую заявку только после аутентификации

Вы можете использовать Middleware, которое вызывается после аутентификации middleware:

UserClaimsMiddleware.cs:

public class UserClaimsMiddleware
{
    private readonly RequestDelegate _next;

    public UserClaimsMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext httpContext)
    {
        if (httpContext.User != null && httpContext.User.Identity.IsAuthenticated)
        {
            var claims = new List<Claim>
            {
            new Claim("SomeClaim", "SomeValue")
            };

            var appIdentity = new ClaimsIdentity(claims);
            httpContext.User.AddIdentity(appIdentity);

            await _next(httpContext);
        }
    }
}

public static class UserClaimsMiddlewareExtensions
{
    public static IApplicationBuilder UseUserClaims(
        this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<UserClaimsMiddleware>();
    }
}

И зарегистрируйте промежуточное ПО в функции Configure вашего Startup.cs:

app.UseAuthentication();
app.UseUserClaims();
app.UseMvc();

чтобы не вызывать базу данных для каждого запроса.

Когда серверная сторона получает вызов API с токеном, AddJwtBearer будет декодировать токен, проверять токен и делать аутентификацию пользователя, вы можете добавлять новые утверждения либо в OnTokenValidated, либо в специальном промежуточном программном обеспечении. Но претензии не будут сохраняться в следующих вызовах API, если вы не добавите претензии к каждому запросу.

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