【问题标题】:Why ASP.NET Core adds claims twice into User.Claims property?为什么 ASP.NET Core 在 User.Claims 属性中添加了两次声明?
【发布时间】:2016-10-06 05:25:51
【问题描述】:

我有 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 时成功验证后,我看到所有声明都添加了两次。
以下是 Home 控制器中User.Claims 的快速观看

为什么声明会在 User.Claims 中添加两次?

【问题讨论】:

  • 我不知道您是如何看到声明重复的...

标签: asp.net-core asp.net-core-mvc identityserver3 coreclr


【解决方案1】:

因为您将 openidconnect 的 AutomaticAuthenticate 设置为 true。如果您查看用户身份,您将看到有两个身份(一个用于 cookie,另一个用于 openidconnect 身份验证)。由于User.Claims 是这些身份声明的总和,因此您会看到两次声明。因此,从 openidconnect 选项中删除 AutomaticAuthenticate = true, 即可解决问题。

【讨论】:

  • 我从 OpenIdConnectOptions 中删除了 AutomaticAuthenticate = true 并将其留给 CookieAuthentication.. 它有效!!!
猜你喜欢
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多