我有 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);
}
}
};
下面是 OnTokenValidated
处理程序中 TokenValidatedContext.Ticket.Principal.Claims
的快速观察
但是,当我在 Home Controller 中调试 User.Cliams
时成功验证后,我看到所有声明都添加了两次。
下面是 Home Controller 中 User.Claims
的快速查看
为什么在 User.Claims 中添加了两次声明?
最佳答案
因为您将 openidconnect 的 AutomaticAuthenticate
设置为 true。如果您查看用户身份,您会看到有两个身份(一个用于 cookie,另一个用于 openidconnect 身份验证)。由于 User.Claims
是这些身份声明的总和,您会看到两次声明。因此,从 openidconnect 选项中删除 AutomaticAuthenticate = true,
可以解决问题。
关于asp.net-core - 为什么 ASP.NET Core 将声明两次添加到 User.Claims 属性中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39881401/