Разрешить все домены при добавлении пользователя в Azure B2C с помощью Graph API

#microsoft-graph-api #azure-ad-b2c

#microsoft-graph-api #azure-ad-b2c

Вопрос:

Я пытаюсь добавить пользователя с электронной почтой ...@gmail.com в свой каталог B2C с помощью Graph API (C #). Я получаю это в качестве ответа:

Доменная часть свойства userPrincipalName недопустима. Вы должны использовать одно из проверенных доменных имен в вашей организации.

Эта система должна позволять пользователям любого домена электронной почты входить в систему. Пользователям необходимо входить на веб-сайт, а не иметь доступа к порталу Azure.

Есть ли способ выполнить это без добавления каждого домена вручную?

Код для добавления пользователя через Graph API:

 var confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var authProvider = new ClientCredentialProvider(confidentialClientApplication);
            
var graphClient = new GraphServiceClient(authProvider);

var user = new User
{
    AccountEnabled = true, 
    DisplayName = emailAddress,
    MailNickname = emailAddress.Split('@').FirstOrDefault(),
    UserPrincipalName = emailAddress,
    PasswordProfile = new PasswordProfile
    {
        ForceChangePasswordNextSignIn = true,
        Password = tempPassword
    }
};
  

Ответ №1:

Если вы пытаетесь создать локальные учетные записи B2C (не AAD), попробуйте установить свойство identities в своем запросе, но не upn. Последнее должно быть сгенерировано автоматически. Кроме того, срок действия пароля должен быть отключен, а принудительное изменение пароля при следующем входе также должно быть отключено.

Комментарии:

1. Работает после удаления MailNickname и UPN и замены на: Identities = new List<ObjectIdentity> { new ObjectIdentity { SignInType = "emailAddress", Issuer = domainName, IssuerAssignedId = emailAddress} },

Ответ №2:

Мне пришлось добавить следующие пакеты:

 <PackageReference Include="Microsoft.Graph" Version="4.0.0-preview.7" />
<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
  

Затем:

        var confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create(Settings.ClientId)
            .WithTenantId(Settings.Tenant)
            .WithClientSecret(Settings.ClientSecret)
            .Build();
        
        var authProvider = new ClientCredentialProvider(confidentialClientApplication);

        var graphClient = new GraphServiceClient(authProvider);

        var user = new User
        {
            AccountEnabled = true,
            GivenName = "Name",
            Surname = "Surname",
            DisplayName = "Name Surname",
            PasswordProfile = new PasswordProfile
            {
                ForceChangePasswordNextSignIn = false,
                Password = "pass.123",
            },
            PasswordPolicies = "DisablePasswordExpiration",
            Identities = new List<ObjectIdentity>
            {
                new ObjectIdentity()
                {
                    SignInType = "emailAddress",
                    Issuer = Settings.Tenant,
                    IssuerAssignedId = "sample@sample.com"
                }
            }
        };

        await graphClient.Users.Request().AddAsync(user);
  

Обязательно добавьте разрешение на создание пользователей в Azure portal.

Комментарии:

1. Обратите внимание, что это Settings.Tenant должно быть ваше полное имя клиента AAD B2C (xxx.onmicrosoft.com ).