【问题标题】:How to make Asp.Net Core Identity to work with OpenIdConnect如何使 Asp.Net Core Identity 与 OpenIdConnect 一起使用
【发布时间】:2019-08-30 00:40:11
【问题描述】:

如何从 asp.net 核心项目重新生成 open id connect 自定义声明?

我已经设置了手动映射到声明类型名称,但有时我需要从事件 OnTicketRecieved 之外更新其他声明,即来自控制器,所以在那个阶段我确实需要以某种方式重新生成声明。我通过以下方式设置了 openIdConnect:

        _services
            .AddAuthentication(options =>
            {
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
            .AddOpenIdConnect(options =>
            {
                options.ClientId = clientId;
                options.ClientSecret = clientSecret;
                options.Authority = $"{baseAuthorityUrl}/{tenantId}";
                options.CallbackPath = new PathString(callBackPath);
                options.Scope.Add("email");
                options.Scope.Add("profile");

                options.TokenValidationParameters = new TokenValidationParameters
                {
                    NameClaimType = "name"
                };

                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
                options.Events = new OpenIdConnectEvents
                {
                    OnRedirectToIdentityProvider = e =>
                    {

                        return Task.CompletedTask;
                    },
                    OnTicketReceived = e =>
                    {
                        e.Principal.Identities.First().AddClaim(new Claim(ClaimTypes.Name, e.Principal.FindFirstValue("name")));

                        return Task.CompletedTask;
                    }
                };
            })

如何从控制器重新生成声明? 我正在考虑以某种方式覆盖 signInManager.RefreshSignInAsync(user)。

【问题讨论】:

    标签: c# asp.net-core asp.net-identity openid-connect


    【解决方案1】:

    如果您想在初始化登录后在控制器中添加声明,您应该让身份验证管理器使用新身份:

    if (HttpContext.User.Identity is ClaimsIdentity identity)
    {
    
        identity.AddClaim(new Claim("userId", "1234"));
        await HttpContext.SignInAsync(
            CookieAuthenticationDefaults.AuthenticationScheme,
            new ClaimsPrincipal(HttpContext.User.Identity));
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-02
      • 2020-08-31
      • 2021-12-20
      • 1970-01-01
      • 2021-09-04
      • 2019-12-15
      • 2019-11-15
      • 1970-01-01
      • 2017-06-20
      相关资源
      最近更新 更多