1

我是 asp.net 核心的新手。我正在尝试使用来自 Google、Facebook、...的 jwt 身份验证和 OpenOauth 制作一个小型 Web 服务。

我读过这篇文章: https ://stormpath.com/blog/token-authentication-asp-net-core

这篇文章是关于在 ASP.Net 核心中使用 jwt 进行身份验证的,但是,我还想验证用户在我的系统中是被禁用还是处于活动状态

我的数据库有一个包含 4 列的表:ID、名称、密码、状态(0 - 禁用 | 1 - 活动)。

我怎样才能实现我的目标?

任何人都可以帮助我吗?

P/S:我已经在 google 上搜索了关于 asp.net 中 jwt 的完整教程,但是很少。身份验证流程的完整源代码表示赞赏。

4

1 回答 1

1

我测试了三种方法(它们有效,但我不知道哪一种是正确的方法)。

首先是使用OnTokenValidated事件:

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

二是使用Usejwt中间件后的方法:

        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);
于 2016-09-29T12:29:40.030 回答