Токен на предъявителя 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);