重命名.net core openid connect配置中的配置文件声明映射



我在配置文件范围内发送了多个声明。这些声明包括:

employeeType邮件givenName

这些accessToken声明被自动映射到相同的名称。我希望将它们更改为更改映射,如下所示:

雇员类型=雇员类型

mail = mail

givenName = FirstName

我尝试使用MapJsonKey(),但它不工作,我也尝试了MapUniqueJsonKey()。我认为这些可能只用于userInfoClaims?

options.ClaimActions.MapJsonKey("EmployeeType", "employeeType");
options.ClaimActions.MapJsonKey("FirstName", "givenName");
options.ClaimActions.MapJsonKey("Email", "Mail");

是否有一种方法将这些映射到不同的名称,或者我是否必须删除声明并使用OnTokenValidated钩子将它们添加到principal ?

这是我在启动时的认证配置。

services.AddAuthentication(options => {
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, o =>
{
o.Cookie.Name = "GCOWebCookie";
o.AccessDeniedPath = "/AccessDenied";
})
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => {
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = config["OneId:Authority"];
options.ClientId = config["OneId:ClientId"];
options.ResponseType = "code";
options.ClientSecret = config["OneId:ClientSecret"];
options.SaveTokens = true;
//options.GetClaimsFromUserInfoEndpoint = true;
options.UsePkce = true;
//options.Scope.Add("profile"); These scopees are added by default
//options.Scope.Add("openid");

我会尝试使用以下方法:

options.ClaimActions.MapUniqueJsonKey("EmployeeType", "employeeType");

问题中的上述将只映射id -令牌的声明并将其转换为User对象。AddOpenIdConnect对访问令牌的内容不做任何操作。它从不查看访问令牌的内部。

AddJwtBearer只监听访问令牌,当您在AddJwtBearer内部进行映射时,访问令牌中的声明将被映射到用户对象。AddJwtBearer在接收访问令牌的后端API中使用。

要进一步自定义声明,您可以像这个问题中所示的那样挂钩到OnTicketReceived事件:

为了补充这个答案,我写了一篇博客文章,详细介绍了这个问题本主题是:调试ASP中OpenID连接声明问题。网络核心

相关内容

最新更新