Токен на предъявителя WEB API asp.net ядро ​​без перенаправления

Я новичок в ядре asp.net. Я пытаюсь сделать небольшой веб-сервис с использованием аутентификации jwt и OpenOauth от Google, Facebook, ...

Я прочитал этот пост: https://stormpath.com/blog/token-authentication-asp-net-core

Этот пост посвящен аутентификации с помощью jwt в ядре ASP.Net, но я также хочу проверить, отключен ли пользователь или активен в моей системе.

В моей базе данных есть одна таблица с 4 столбцами: Id, Name, Password, Status (0 - отключено | 1 - активно).

Как я могу достичь своей цели?

Кто-нибудь может мне помочь?

P / S: я искал в Google полные учебники о jwt в asp.net, но их было так мало. Полный исходный код для потока аутентификации приветствуется.

1 ответ

Есть три способа, которыми я тестировал (они работали, но я не знаю, какой из них правильный).

Первый использует OnTokenValidated событие:

 OnTokenValidated = async (ctx) =>
 {
       if(user is disabled)
       {
           ctx.Response.Headers.Append(
                        HeaderNames.WWWAuthenticate,
                        ctx.Options.Challenge);
           ctx.SkipToNextMiddleware();
       }
 }

Второй использует Use метод после промежуточного программного обеспечения JWT:

        app.Use(async (context, next) =>
        {
            var auth = await context.Authentication.AuthenticateAsync("Bearer");
            if (auth.Identity.IsAuthenticated && user is disabled)
            {
                context.Response.Headers.Append(
                      HeaderNames.WWWAuthenticate,
                      "Bearer");
            }
            await next();
        });

Последний использует SecurityTokenValidators:

public class CustomSecurityTokenValidator  : JwtSecurityTokenHandler
{
    public CustomSecurityTokenValidator()
    {
    }

    public override ClaimsPrincipal ValidateToken(string securityToken,
        TokenValidationParameters validationParameters, out SecurityToken validatedToken)
    {
        var principal = base.ValidateToken(securityToken, validationParameters, out validatedToken);
        if(user is disabled)
        {
            throw new SecurityTokenNotYetValidException();
        }
        else
        {
            return principal;
        }
    }
}

..... in Startup.cs ...........
var options = new JwtBearerOptions()
{
     //....
}
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new CustomTokenValidator());
app.UseJwtBearerAuthentication(options);
Другие вопросы по тегам