在Asp.Net Core的身份验证流程中,JWT token是在授权之后生成的。在生成之前,可以使用一个自定义的JWT生成器来自定义token的生成和格式。下面是一个示例:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])),
ClockSkew = TimeSpan.Zero
};
options.Events = new JwtBearerEvents
{
OnTokenValidated = context =>
{
// modify token claims
var claimsIdentity = context.Principal.Identity as ClaimsIdentity;
claimsIdentity?.AddClaim(new Claim("custom_claim", "custom_value"));
return Task.CompletedTask;
}
};
});
在上面的示例中,我们配置了一个自定义的JWT生成器,用来添加自定义的声明到token中。在OnTokenValidated
事件回调中将新的声明添加到token的Claims Identity中。这样生成的token就包含了自定义的声明。