User.identity.Name имеет значение null — настройте имя с проверкой подлинности Azure .net 4.7

У меня есть приложение в .net 4.7, и я хочу перенести аутентификацию, чтобы использовать Azure AD из аутентификации Windows. У меня это работает, но я хочу использовать User.Identity.Name, который в настоящее время равен нулю

Я видел, что могу как-то настроить это в startup.cs в конфигурации, используя NameClaimTypeReceiver.

TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer = false,
                    NameClaimTypeRetriever = OnNameClaimTypeRetriever
                }

Я нигде не вижу примера написания этого метода OnNameClaimTypeRetriever

не могли бы вы привести пример.

Я хочу установить для него значение OnPremisesSamAccountName, которое я могу получить через лазурный график.


person user900566    schedule 14.05.2020    source источник


Ответы (1)


NameClaimTypeRetriever вызывается из TokenValidationParameters.CreateClaimsIdentity(SecurityToken securityToken, эмитент строки) с использованием тех же параметров.

Пример:

    NameClaimTypeRetriever = (SecurityToken securityToken, string issuer) =>
    {
        var validUserNameTokens = new[] { "preferred_username", JwtRegisteredClaimNames.Email };
        return validUserNameTokens.FirstOrDefault(token => (securityToken as JwtSecurityToken).Claims.Any(claim => token == claim.Type));
    }

Это проверяет любое утверждение, которое имеет тип «preferred_username» или «email». Если он отсутствует, возврат null заставляет CreateClaimsIdentity() вместо этого использовать ClaimsIdentity.DefaultNameClaimType.

person 9Rune5    schedule 25.02.2021