添加具有自定义声明的用户

时间:2019-12-09 09:42:17

标签: azure-ad-b2c

我在通过自定义声明通过Microsoft Graph Api将用户添加到Azure B2C时遇到问题。我添加了一个称为“样本”的声明,当我通过注册添加用户时,该声明将填充我输入的值。

但是,我需要通过不具有自我注册功能的代码来添加用户。我有以下代码将添加用户

// create the connection
var confidentialClientApplication = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithTenantId(tenantId)
    .WithClientSecret(clientSecret)
    .Build();

var authProvider = new ClientCredentialProvider(confidentialClientApplication);

var client = new GraphServiceClient(authProvider);

var user = new User
{
    AccountEnabled = true,
    DisplayName = "John Smith",
    UserPrincipalName = $"john.smith@{tenantId}",
    MailNickname = "john.smith",
    PasswordProfile = new PasswordProfile
    {
        ForceChangePasswordNextSignIn = false,
        Password = "P@ssword1"
    },
};

var addedUser = await client.Users.Request().AddAsync(user);

相同,但是直接使用HTTP。再次添加用户

POST /v1.0/users HTTP/1.1
Host: graph.microsoft.com
SdkVersion: postman-graph/v1.0
Content-Type: application/json
Authorization: Bearer [redacted]
User-Agent: PostmanRuntime/7.20.1
Accept: */*
Cache-Control: no-cache
Postman-Token: [redacted]
Host: graph.microsoft.com
Accept-Encoding: gzip, deflate
Content-Length: 325
Connection: keep-alive
cache-control: no-cache

{
    "accountEnabled": true,
    "displayName": "Joe Blogs",
    "mailNickname": "joe.blogs",
    "userPrincipalName": "joe.blogs@[redacted].onmicrosoft.com",
    "passwordProfile": {
        "forceChangePasswordNextSignIn": true,
        "password": "P@ssword1"
    },
    "passwordPolicies": "DisablePasswordExpiration"
}

正如我所说的,上面的代码将添加一个用户,但是我无法弄清楚如何同时添加自定义声明。第一组代码使用Microsoft.Graph nuget包。第二个是从Postman的直接http调用中获取的。

阅读文档时,我似乎盘旋而过,似乎看不出如何在新的B2C v2中做到这一点。

有人知道吗?

欢呼

1 个答案:

答案 0 :(得分:0)

确定了如何执行此操作。需要像上面一样添加用户,然后使用自定义声明对其进行更新。他们的关键是声明具有

格式的名称
  

extension_xxxxx_sample

其中xxxxx具有 b2c-extensions-app 应用程序的应用程序ID,这是一个内置应用程序。

因此,一旦添加了用户,则以下代码将添加自定义声明

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

var authProvider = new ClientCredentialProvider(confidentialClientApplication);

var client = new GraphServiceClient(authProvider);

var dictionary = new Dictionary<string, object>();
dictionary.Add("extension_xxxxx_sample", "abcd");

await client.Users[$"john.smith@{tenantId}"]
    .Request()
    .UpdateAsync(new User()
    {
        AdditionalData = dictionary
    });

关键是 b2c-extensions-app 的应用ID可能为 7e4ff0cd-825a-47ba-a08c-b13a4244b4ce 。但是,您可以在声明中添加以下

  

extension_7e4ff0cd825a47baa08cb13a4244b4ce_sample

不配合

  

extension_7e4ff0cd-825a-47ba-a08c-b13a4244b4ce_sample