在核心中启动项目时检查 jwt 令牌 ASP.NET



我需要在Asp Core中检查jwt Token。

我为服务中的注入创建了此扩展方法:

public static class AddJWTAuthntication
{
public static void AddJWTAuthnticationInjection(this IServiceCollection services,SiteSetting siteSetting)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
var securityKey = Encoding.UTF8.GetBytes(siteSetting.JwtSetting.SecretKey);
var ValidatePrameters = new TokenValidationParameters
{
//Tlorance for Expire Time and Befor Time of Token .
ClockSkew = TimeSpan.Zero,
RequireSignedTokens = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(securityKey),
// I Need Check Expire Token or Not
RequireExpirationTime = true,
ValidateLifetime = true,
ValidateAudience = true,
ValidAudience = siteSetting.JwtSetting.Audience,
ValidateIssuer = true,
ValidIssuer = siteSetting.JwtSetting.Issuer
};
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = ValidatePrameters;
});
}
}

并在启动的服务扩展中使用它:

services.AddJWTAuthnticationInjection(_siteSetting);

这是我Configure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseCors(builder => builder
.AllowAnyHeader()
.AllowAnyMethod()
.SetIsOriginAllowed((host) => true)
.AllowCredentials()
);
app.UseAuthorization();
app.UseAuthentication();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

现在,当我运行项目时,它会转到AddJWTAuthnticationInjection进行检查验证,但是当我发送请求时,它不会转到AddJWTAuthnticationInjection进行检查令牌验证。

我需要逆转这一点,当用户发送请求时,它会检查令牌验证。

怎么了?我该如何解决?

这与令牌验证无关! 您正在使用您的设置设置 ASP.NET Core 的Authentication Middleware,因此此过程需要执行一次,并且在应用程序启动时发生。

令牌验证在Authentication Middleware内部进行(您在StartUp.csConfigure方法中使用了app.UseAuthentication()(。 因此,您无需担心验证过程,只需处理在AddJWTAuthnticationInjection方法中所做的设置即可。

  • 您在配置方法中放错了身份验证中间件和授权中间件。身份验证中间件需要像这样放在授权中间件之前

    app.UseAuthentication();
    app.UseAuthorization();
    
  • 不要忘记在控制器上添加[Authorize]属性以启用令牌验证

最新更新