我有asp.net核心应用程序,应用程序正在使用IdentityServer3进行OpenIdConnect身份验证。当用户成功通过身份验证后,应用程序会从身份服务器接收正确的声明。我可以调试TokenValidatedContext.Ticket.Principal.Claims
中的行OnTokenValidatd
,并确保应用程序收到所有声明。
代码段
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
的快速监视
但是,在我在家庭控制器中调试User.Cliams
后成功验证后,我看到所有声明都被添加了两次。
以下是家庭控制器中User.Claims
的快速监视
为什么声明会在User.Claims中添加两次?
答案 0 :(得分:4)
因为您将openidconnect的AutomaticAuthenticate
设置为true。如果您查看用户身份,您将看到有两个身份(一个用于cookie,其他用于openidconnect身份验证)。由于User.Claims
是这些身份声明的总和,因此您会看到两次声明。因此,从openidconnect选项中删除AutomaticAuthenticate = true,
可以解决问题。