在Asp.net core中,我们可以使用JwtBearer身份验证来验证用户,并在其上下文中添加自定义声明。有时,我们可能需要循环添加自定义声明时,解决方法如下。
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:SecretKey"])), ClockSkew = TimeSpan.Zero };
// Add event to add custom claims
options.Events = new JwtBearerEvents
{
OnTokenValidated = context =>
{
var customClaims = new List
{
new Claim("customClaim1", "value1"),
new Claim("customClaim2", "value2")
};
var identity = context.Principal.Identity as ClaimsIdentity;
identity?.AddClaims(customClaims);
return Task.CompletedTask;
}
};
});
在'OnTokenValidated”事件中,我们可以添加自定义声明。这里我们添加了两个自定义声明:'customClaim1”和'customClaim2”。
[HttpGet] [Authorize] public IActionResult Get() { var claimsIdentity = (ClaimsIdentity)User.Identity; var customClaims = claimsIdentity.Claims.Where(x => x.Type.StartsWith("customClaim")).ToList(); return Ok(customClaims); }
这将返回所有以'customClaim”开头的声明。如果我们在上面的代码示例中添加了两个自定义声明,则此方法将返回这两个声明。
通过在JwtBearerOptions中添加'OnTokenValidated”事件,我们可以循环添加自定义声明。在控制器中,我们可以使用User.Identity.Claims获取所有声明并获得自定义声明的列表。