.net 在. net core openid connect配置中重命名配置文件声明Map

qf9go6mv  于 2023-04-13  发布在  .NET
关注(0)|答案(1)|浏览(191)

我在配置文件范围中发回了多个声明。这些声明包括:
employeeType mail givenName
这些accessToken声明将自动Map到相同的名称。我希望将它们更改为以下Map:
EmployeeType = EmployeeType
mail =邮件
givenName =名字
我尝试使用MapJsonKey(),但它不工作,我还尝试了MapUniqueJsonKey()。我认为这些可能只用于userInfoClaims?

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

有没有办法将这些Map到不同的名称,或者我必须删除声明并使用OnTokenValidated钩子将它们添加到Princical?
这是我在启动时的身份验证配置。

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");
mwg9r5ms

mwg9r5ms1#

我会尝试使用这个方法:

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

上面你在问题中,只会MapID令牌的声明并将其转换为User对象。AddOpenIdConnect不会对访问令牌的内容做任何事情。它从不查看访问令牌内部。
然而,AddJwtBearer只监听访问令牌,当你在AddJwtBearer内部进行Map时,访问令牌中的声明将被Map到用户对象。AddJwtBearer你在后端API中使用,用于接收访问令牌。
要进一步自定义声明,您可以挂钩到OnTicketReceived事件,如question所示:
为了补充这个答案,我写了一篇博客文章,更详细地介绍了这个主题:Debugging OpenID Connect claim problems in ASP.NET Core

相关问题