在ASP.NET Core 5应用程序中使用JWT令牌并使用Novell AD库进行身份验证的解决方案如下:
在NuGet包管理器中添加以下依赖项: Microsoft.AspNetCore.Authentication.JwtBearer - 用于JWT身份验证 Novell.Directory.Ldap.NETStandard - 用于与AD进行身份验证的LDAP库
在Startup.cs中配置身份验证服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.Authority = Configuration["Jwt:Issuer"];
options.Audience = Configuration["Jwt:Audience"];
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
ValidateIssuer = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidateAudience = true,
ValidAudience = Configuration["Jwt:Audience"],
ClockSkew = TimeSpan.Zero
};
});
services.AddSingleton(Configuration);
services.AddSingleton();
...
}
private string GenerateJwtToken(User user)
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Sub, user.Username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Role, "admin") // 从LDAP中获取用户角色并添加到此处
};
var token = new JwtSecurityToken(Configuration["Jwt:Issuer"],
Configuration["Jwt:Audience"],
claims,
expires: DateTime.Now