ASP.NET Core Identity использует неправильный NameClaimType с OpenIdConnect - PullRequest
0 голосов
/ 01 октября 2018

Я использую промежуточное ПО OpenIdConnect для аутентификации с помощью AzureAD.И идентичность для обработки всего этого.

На странице лесов ExternalLogin в скаффолде я получаю правильный SignUpInfo, где имя принципа соответствует ожидаемому (полное имя).При реализации по умолчанию Identity отбрасывает эту информацию и использует адрес электронной почты в качестве основного имени.Соответствующее имя участника (полное имя) никогда не сохраняется.

Я видел, что эти два используют разные NameClaimTypes.Но его настройка в AddIdentity (...) или AddOpenIdConnect (...) ничего не меняет.

Как мне с этим справиться?

Обновление

Startup.cs

        var authenticationMethods = services.AddAuthentication()
            .AddOpenIdConnect(authenticationScheme, authenicationDisplayName, options =>
            {
                options.ClientId = azureAdOptions.ClientId;
                options.ClientSecret = azureAdOptions.ClientSecret;
                options.Authority = $"{azureAdOptions.Instance}common/v2.0";
                options.CallbackPath = azureAdOptions.CallbackPath;
                options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
                options.SaveTokens = true;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer = $"{azureAdOptions.Instance}{azureAdOptions.TenantId}/v2.0",
                    NameClaimType = "name"
                };
                options.Events.OnRemoteFailure = context =>
                {
                    logger.LogError(context.Failure, "Fehler beim Anmelden via XYZ");

                    context.Response.Redirect("/");
                    context.HandleResponse();

                    return Task.CompletedTask;
                };

                azureAdOptions.Scopes.ForEach(options.Scope.Add);
            });

        // Fügt die ASP.NET CORE Identity Middleware hinzu
        services.AddIdentity<TUser, IdentityRole>()
            .AddRoleManager<RoleManager<TRole>>()
            .AddDefaultUI()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<TContext>();

ExternalLogin.cshtml.cs (код леса по умолчанию)

        // Sign in the user with this external login provider if the user already has a login.
        var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false, bypassTwoFactor : true);
        if (result.Succeeded)
        {
            await _signInManager.UpdateExternalAuthenticationTokensAsync(info);

            _logger.LogInformation("{Name} logged in with {LoginProvider} provider.", info.Principal.Identity.Name, info.LoginProvider);
            return LocalRedirect(returnUrl);
        }

Здесь info.Principal.Identity.Name представляет читаемое полное имя, которое получено изNameClaimTypes 'имя' из OpenIdConnect.Но после входа в систему Identity использует «Пространство имен XML» для NameClaimTypes, и в каждом контроллере User.Identity.Name преобразуется в имя пользователя / адрес электронной почты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...