通过Microsoft Graph API创建新的AD B2C用户

时间:2019-04-10 16:46:48

标签: .net microsoft-graph azure-ad-b2c

我决定使用Microsoft.Graph .NET SDK,而不是将旧的Azure Graph API与手动HTTP请求一起使用。

问题是,当我尝试通过电子邮件创建新用户时,例如areller@gmail.com

var req = _client.Users.Request();
var userRes = req.AddAsync(new User()
{
    AccountEnabled = true,
    DisplayName = user.Email,
    MailNickname = user.GivenName,
    GivenName = user.GivenName,
    Surname = user.SurName,
    UserPrincipalName = user.Email,
    PasswordProfile = new PasswordProfile()
    {
        Password = user.Password,
        ForceChangePasswordNextSignIn = true
    },
    PasswordPolicies = "DisablePasswordExpiration, DisableStrongPassword",
    Country = user.Country,
    City = user.City,
    PostalCode = user.ZipCode
}).Result;

我得到一个异常,指出“属性userPrincipalName无效” enter image description here

仅当我使用以租户为域的电子邮件时,才能创建用户。 areller@mytenant.onmicrosoft.com 但这不是我所需要的。 我需要能够以编程方式创建实际的外部用户。

使用Azure Graph API可以正常工作 有没有办法使其与Microsoft Graph API一起使用?

2 个答案:

答案 0 :(得分:2)

当前,您不能使用Microsoft Graph在Azure AD B2C租户中创建用户,因为它不支持一些用户属性(包括 creationType signInNames 属性)。

您必须use Azure AD Graph for this

注意:当您在Azure AD B2C租户中创建用户时,请将 creationType 属性设置为LocalAccount,则 userPrincipalName 属性不必之所以设置,是因为 signInNames 属性包含外部用户的电子邮件地址。

答案 1 :(得分:1)

根据https://github.com/Azure-Samples/ms-identity-dotnetcore-b2c-account-management的Github。 现在,您可以使用Microsoft Graph通过https://github.com/Azure-Samples/ms-identity-dotnetcore-b2c-account-management/blob/master/src/Services/UserService.cs

中的代码为Azure AD B2C创建一个新用户。
var result = await graphClient.Users
            .Request()
            .AddAsync(new User
            {
                GivenName = "Casey",
                Surname = "Jensen",
                DisplayName = "Casey Jensen",
                Identities = new List<ObjectIdentity>
                {
                    new ObjectIdentity()
                    {
                        SignInType = "emailAddress",
                        Issuer = tenantId,
                        IssuerAssignedId = "casey.jensen@example.com"
                    }
                },
                PasswordProfile = new PasswordProfile()
                {
                    Password = Helpers.PasswordHelper.GenerateNewPassword(4, 8, 4)
                },
                PasswordPolicies = "DisablePasswordExpiration",
                AdditionalData = extensionInstance
            });