Как заставить Asp.Net Core Identity работать с OpenIdConnect - PullRequest
2 голосов
/ 08 апреля 2019

Как восстановить пользовательские заявки open id connect из основного проекта asp.net?

Я настроил сопоставление вручную с именем типа заявки, но иногда мне нужно обновить другое утверждение извне события OnTicketRecceive, а именно из контроллера, поэтому на этом этапе мне нужно каким-то образом восстановить заявки. Я настроил 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 (пользователь).

1 Ответ

0 голосов
/ 09 апреля 2019

Если вы хотите добавить претензии в контроллер после входа в систему init, вы должны настроить диспетчер аутентификации для использования нового идентификатора:

if (HttpContext.User.Identity is ClaimsIdentity identity)
{

    identity.AddClaim(new Claim("userId", "1234"));
    await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme,
        new ClaimsPrincipal(HttpContext.User.Identity));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...