在使用AspnetCore 3.1时,您可以通过ClaimActions.MapJsonKey方法从OpenIdConnectEvent中获取声明。下面是一个包含代码示例的解决方法:
public void ConfigureServices(IServiceCollection services)
{
// 注册OpenIdConnectOptions的配置
services.Configure(Configuration.GetSection("OpenIdConnect"));
// 其他配置...
}
{
"OpenIdConnect": {
"Authority": "https://yourauthority.com",
"ClientId": "yourclientid",
"ClientSecret": "yourclientsecret",
"CallbackPath": "/signin-oidc",
"ResponseType": "code",
"SaveTokens": true,
"Events": {
"OnTokenValidated": "HandleTokenValidated"
}
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 其他中间件配置...
// 添加事件处理程序
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
// 其他配置...
Events = new OpenIdConnectEvents
{
OnTokenValidated = context =>
{
// 获取声明
var claims = context.Principal.Claims;
// 使用ClaimActions.MapJsonKey方法从OpenIdConnectEvent中获取声明
ClaimActions.MapJsonKey(claims, "your_claim_name", "your_claim_property_name");
return Task.CompletedTask;
}
}
});
// 其他中间件配置...
}
以上代码示例中,您可以将"your_claim_name"替换为您希望获取的声明名称,将"your_claim_property_name"替换为OpenIdConnectEvent中的实际声明属性名称。
通过以上步骤,您可以使用ClaimActions.MapJsonKey方法从OpenIdConnectEvent中获取声明。