1

我是新来的asp.net核心。我试图让使用来自谷歌,Facebook,智威汤逊认证和OpenOauth小型Web服务...无标记WEB API asp.net核心无重定向

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

这篇文章是关于在ASP JWT认证。 Net core,但是,我还想验证用户是否已在我的系统中被禁用或处于活动状态。

我的db有一个包含4列的表:Id,Name,Password,Status(0 - Disabled | 1 - Active)。

我该如何实现我的目标?

任何人都可以帮助我吗?

P/S:我在谷歌搜索了关于jwt在asp.net中的完整教程,但实在太少了。感谢认证流程的完整源代码。

回答

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); 
相关问题