Seyounth.Auto.Hs/share/Syc.Authorize.JwtBearer/JwtBearerAuthenticationModule.cs

56 lines
2.7 KiB
C#
Raw Normal View History

2025-06-04 09:42:48 +08:00
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using Volo.Abp.Modularity;
namespace Syc.Authorize.JwtBearer
{
public class JwtBearerAuthenticationModule:AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
base.PreConfigureServices(context);
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
base.ConfigureServices(context);
var jwtSection = context.Services.GetConfiguration()?.GetSection("JwtSetting");
if (jwtSection is null)
throw new FieldAccessException("配置文件中未找到 JwtSetting 节点");
JwtBearerAuthenticationOptions jwtBearerAuthorizeOptions = jwtSection?.Get<JwtBearerAuthenticationOptions>();
Configure<JwtBearerAuthenticationOptions>(jwtSection);
Action<JwtBearerOptions> action = options =>
{
options.TokenValidationParameters = jwtBearerAuthorizeOptions.TokenValidationParameters ?? new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
{
ValidateIssuerSigningKey = jwtBearerAuthorizeOptions.ValidateIssuerSigningKey,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtBearerAuthorizeOptions.SecurityKey)),
ValidateIssuer = jwtBearerAuthorizeOptions.ValidateIssuer,
ValidIssuer = jwtBearerAuthorizeOptions.Issuer,
ValidateAudience = jwtBearerAuthorizeOptions.ValidateAudience,
ValidAudience = jwtBearerAuthorizeOptions.Audience,
ValidateLifetime = jwtBearerAuthorizeOptions.ValidateLifetime,
ClockSkew = TimeSpan.FromMinutes(jwtBearerAuthorizeOptions.ClockSkew)
};
options.Events = new JwtBearerEvents();
options.Events.OnChallenge = jwtBearerAuthorizeOptions.OnChallenge;
options.Events.OnForbidden = jwtBearerAuthorizeOptions.OnForbidden;
options.Events.OnAuthenticationFailed = jwtBearerAuthorizeOptions.OnAuthenticationFailed;
};
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(action);
context.Services.AddAuthorization();
context.Services.AddTransient<IAuthorizationMiddlewareResultHandler, AppAuthorizationMiddlewareResultHandler>();
}
}
}