为什么 ASP.NET Core 在 User.Claims 属性 中添加声明两次?
Why ASP.NET Core adds claims twice into User.Claims property?
我有 asp.net 核心应用程序,该应用程序使用 IdentityServer3 使用 OpenIdConnect 身份验证。当用户成功通过身份验证时,应用程序会从身份服务器接收到正确的声明。我可以调试 OnTokenValidatd
中的行 TokenValidatedContext.Ticket.Principal.Claims
并确保应用程序收到所有声明。
代码片段
var connectOptions = new OpenIdConnectOptions()
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Authority = authority,
ClientId = clientId,
ResponseType = IdentityConstant.IdTokenClaim,
AuthenticationScheme = IdentityConstant.OpenIdAuthenticationScheme,
SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme,
PostLogoutRedirectUri = postlogoutRedirectUri,
CallbackPath = IdentityConstant.CallbackPath,
Events = new OpenIdConnectEvents()
{
OnTokenValidated = async context =>
{
var claims = context.Ticket.Principal.Claims;
await Task.FromResult(0);
}
}
};
下面是 TokenValidatedContext.Ticket.Principal.Claims
在 OnTokenValidated
处理程序
中的快速观察
然而,当我在 Home 控制器中调试 User.Cliams
时验证成功后,我看到所有声明都添加了两次。
下面是家庭控制器
中User.Claims
的快速观看
为什么在 User.Claims 中添加了两次声明?
因为您将 openidconnect 的 AutomaticAuthenticate
设置为 true。如果您查看用户身份,您会看到有两个身份(一个用于 cookie,另一个用于 openidconnect 身份验证)。由于 User.Claims
是这些身份声明的总和,因此您会看到两次声明。因此,从 openidconnect 选项中删除 AutomaticAuthenticate = true,
即可解决问题。
我有 asp.net 核心应用程序,该应用程序使用 IdentityServer3 使用 OpenIdConnect 身份验证。当用户成功通过身份验证时,应用程序会从身份服务器接收到正确的声明。我可以调试 OnTokenValidatd
中的行 TokenValidatedContext.Ticket.Principal.Claims
并确保应用程序收到所有声明。
代码片段
var connectOptions = new OpenIdConnectOptions()
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Authority = authority,
ClientId = clientId,
ResponseType = IdentityConstant.IdTokenClaim,
AuthenticationScheme = IdentityConstant.OpenIdAuthenticationScheme,
SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme,
PostLogoutRedirectUri = postlogoutRedirectUri,
CallbackPath = IdentityConstant.CallbackPath,
Events = new OpenIdConnectEvents()
{
OnTokenValidated = async context =>
{
var claims = context.Ticket.Principal.Claims;
await Task.FromResult(0);
}
}
};
下面是 TokenValidatedContext.Ticket.Principal.Claims
在 OnTokenValidated
处理程序
然而,当我在 Home 控制器中调试 User.Cliams
时验证成功后,我看到所有声明都添加了两次。
下面是家庭控制器
User.Claims
的快速观看
为什么在 User.Claims 中添加了两次声明?
因为您将 openidconnect 的 AutomaticAuthenticate
设置为 true。如果您查看用户身份,您会看到有两个身份(一个用于 cookie,另一个用于 openidconnect 身份验证)。由于 User.Claims
是这些身份声明的总和,因此您会看到两次声明。因此,从 openidconnect 选项中删除 AutomaticAuthenticate = true,
即可解决问题。