我们已经使用 Idsrv4 大约 2 年了,我们已经成功地与 .Net Core APIs、.Net Core Apps 集成。现在,我们有一个遗留应用程序,从 Net461 迁移到 .Net Core 的成本很高。
我正在尝试将我们的 .Net 461 MVC 应用程序与 Identity Server 4 集成,我几乎成功地集成了它。但问题是,我不知道如何将非标准声明映射到 MVC 应用程序用户声明。
例如,在我们的声明中,我们有像 Country 和 custom_user_id 这样的特殊参数。如果我检查 JwtAccessToken,我可以看到这些值,并且可以确认声明/范围工作正常。但在 UserClaims 中,它们根本不存在。我只能找到 sub、nbr 等标准声明...
在 .Net Core 应用程序中,这很简单,我们只需要ClaimActions.MapUniqueJsonKey
像下面这样使用:
services.AddOpenIdConnect("oidc", options =>
{
....
options.ClaimActions.MapUniqueJsonKey(JwtClaimTypes.Role, JwtClaimTypes.Role);
options.ClaimActions.MapUniqueJsonKey(Constants.CustomClaimTypes.Country, Constants.CustomClaimTypes.Country);
options.ClaimActions.MapUniqueJsonKey("custom_user_id", "custom_user_id");
options.ClaimActions.MapUniqueJsonKey("custom_company_id", "custom_company_id");
您能否指导我如何强制 OWIN 库从 UserInfoEndpoint 获取数据并将我们的自定义声明映射到 UserClaims?
我正在使用 OWIN 库,我的 OWIN StartUp 类如下所示:
public void Configuration(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = xxxx,
ClientSecret = xxx,
Authority = Constants.Urls.IdentityServerProviderUrl,
......
Scope = PopulateScopes(), // custom method
SignInAsAuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
ResponseType = OpenIdConnectResponseType.Code,
UseTokenLifetime = false,
RedeemCode = true,
SaveTokens = true,
TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true
},
}
);
}