我是asp.net核心新手。我试图使用jwt身份验证和Google,Facebook等的OpenOauth创建一个小型Web服务...
我已阅读此帖: https://stormpath.com/blog/token-authentication-asp-net-core
这篇文章是关于在ASP.Net核心中使用jwt进行身份验证,但是,我还要验证用户是否在我的系统中被禁用或处于活动状态。
我的数据库有一个包含4列的表:Id,Name,Password,Status(0 - Disabled | 1 - Active)。
我怎样才能达到目标?
有人可以帮我吗?
P / S:我已经在google上搜索了关于jwt的完整教程,但是有很少的东西。感谢认证流程的完整源代码。答案 0 :(得分:1)
我测试了三种方式(它们有效,但我不知道哪种方法正确)。
首先使用OnTokenValidated
事件:
OnTokenValidated = async (ctx) =>
{
if(user is disabled)
{
ctx.Response.Headers.Append(
HeaderNames.WWWAuthenticate,
ctx.Options.Challenge);
ctx.SkipToNextMiddleware();
}
}
其次是在jwt中间件之后使用Use
方法:
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);