Azure ad b2c 如何在广告B2C中预先创建“商业客户”

Azure ad b2c 如何在广告B2C中预先创建“商业客户”,azure-ad-b2c,azure-ad-graph-api,Azure Ad B2c,Azure Ad Graph Api,我正在构建一个在线Web应用程序,为我的LOB应用程序提供用户。我的大多数客户都是业务客户,这意味着他们通常会被自定义策略定向到v1公共端点,从而允许他们针对自己的AAD租户进行身份验证。挑战在于,新用户需要在LOB应用程序中进行后续设置,以及创建db user、分配一些权限等 作为入职的一部分,我想做的是调用graphAPI来创建b2c中的联合用户帐户,然后使用返回的新用户objectId来处理特定于我的LOB应用程序的后续设置。理想情况下,当用户第一次到达时,他们将根据自己的AAD重定向到a

我正在构建一个在线Web应用程序,为我的LOB应用程序提供用户。我的大多数客户都是业务客户,这意味着他们通常会被自定义策略定向到v1公共端点,从而允许他们针对自己的AAD租户进行身份验证。挑战在于,新用户需要在LOB应用程序中进行后续设置,以及创建db user、分配一些权限等

作为入职的一部分,我想做的是调用graphAPI来创建b2c中的联合用户帐户,然后使用返回的新用户objectId来处理特定于我的LOB应用程序的后续设置。理想情况下,当用户第一次到达时,他们将根据自己的AAD重定向到auth,然后映射到b2c中预先创建的用户,最后使用已设置并准备好的objectId登录LOB应用程序

这是一个创造性地使用自定义策略和graphAPI的受支持场景吗

谢谢
标记

对此,您有以下选项:

使用外部电子邮件地址创建本地帐户用户,并将外部用户标识与此本地帐户用户链接。 创建具有外部用户标识的外部帐户用户。 一,。使用外部电子邮件地址创建本地帐户用户

使用Azure AD Graph API,您可以将用户对象的signInNames属性设置为外部用户的电子邮件地址:

{
  "accountEnabled": false,
  "creationType": "LocalAccount",
  "displayName": "John Smith",
  "passwordProfile": {
    "password": "a-strong-random-password",
    "forceChangePasswordNextLogin": false
  }
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "john.smith@company.com"
    }
  ]
}
{
  "accountEnabled": false,
  "displayName": "John Smith",
  "mailNickname": "john.smith",
  "otherMails": [
    "john.smith@company.com"
  ],
  "userIdentities": [
    {
      "issuer": "https://sts.windows.net/{their-tenant-object-id}/",
      "issuerUserId": "{their-user-object-id}"
    }
  ],
  "userPrincipalName": "{guid}@{your-tenant-name}.onmicrosoft.com"
}
注意:我建议将用户对象的accountEnabled属性设置为true,以便最终用户不能使用本地帐户密码登录

然后,您可以使用自定义策略添加新逻辑,以使用外部电子邮件地址查找本地帐户用户,并将外部用户标识添加到此本地帐户用户,例如:

... 认证源 localAccountAuthentication ,将用户对象的UserIdentifications属性设置为外部用户的对象标识符:

{
  "accountEnabled": false,
  "creationType": "LocalAccount",
  "displayName": "John Smith",
  "passwordProfile": {
    "password": "a-strong-random-password",
    "forceChangePasswordNextLogin": false
  }
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "john.smith@company.com"
    }
  ]
}
{
  "accountEnabled": false,
  "displayName": "John Smith",
  "mailNickname": "john.smith",
  "otherMails": [
    "john.smith@company.com"
  ],
  "userIdentities": [
    {
      "issuer": "https://sts.windows.net/{their-tenant-object-id}/",
      "issuerUserId": "{their-user-object-id}"
    }
  ],
  "userPrincipalName": "{guid}@{your-tenant-name}.onmicrosoft.com"
}
其中,必须将外部用户的对象标识符的issuerUserId设置为base64编码

注意:在Azure AD OpenID Connect技术配置文件中,您可能必须将SocialidUserID声明的声明映射从子声明更改为oid声明,以便它与用户对象的UserIdentity.issuerUserId属性匹配:


对此,您有以下选项:

使用外部电子邮件地址创建本地帐户用户,并将外部用户标识与此本地帐户用户链接。 创建具有外部用户标识的外部帐户用户。 一,。使用外部电子邮件地址创建本地帐户用户

使用Azure AD Graph API,您可以将用户对象的signInNames属性设置为外部用户的电子邮件地址:

{
  "accountEnabled": false,
  "creationType": "LocalAccount",
  "displayName": "John Smith",
  "passwordProfile": {
    "password": "a-strong-random-password",
    "forceChangePasswordNextLogin": false
  }
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "john.smith@company.com"
    }
  ]
}
{
  "accountEnabled": false,
  "displayName": "John Smith",
  "mailNickname": "john.smith",
  "otherMails": [
    "john.smith@company.com"
  ],
  "userIdentities": [
    {
      "issuer": "https://sts.windows.net/{their-tenant-object-id}/",
      "issuerUserId": "{their-user-object-id}"
    }
  ],
  "userPrincipalName": "{guid}@{your-tenant-name}.onmicrosoft.com"
}
注意:我建议将用户对象的accountEnabled属性设置为true,以便最终用户不能使用本地帐户密码登录

然后,您可以使用自定义策略添加新逻辑,以使用外部电子邮件地址查找本地帐户用户,并将外部用户标识添加到此本地帐户用户,例如:

... 认证源 localAccountAuthentication ,将用户对象的UserIdentifications属性设置为外部用户的对象标识符:

{
  "accountEnabled": false,
  "creationType": "LocalAccount",
  "displayName": "John Smith",
  "passwordProfile": {
    "password": "a-strong-random-password",
    "forceChangePasswordNextLogin": false
  }
  "signInNames": [
    {
      "type": "emailAddress",
      "value": "john.smith@company.com"
    }
  ]
}
{
  "accountEnabled": false,
  "displayName": "John Smith",
  "mailNickname": "john.smith",
  "otherMails": [
    "john.smith@company.com"
  ],
  "userIdentities": [
    {
      "issuer": "https://sts.windows.net/{their-tenant-object-id}/",
      "issuerUserId": "{their-user-object-id}"
    }
  ],
  "userPrincipalName": "{guid}@{your-tenant-name}.onmicrosoft.com"
}
其中,必须将外部用户的对象标识符的issuerUserId设置为base64编码

注意:在Azure AD OpenID Connect技术配置文件中,您可能必须将SocialidUserID声明的声明映射从子声明更改为oid声明,以便它与用户对象的UserIdentity.issuerUserId属性匹配:


您可以在用户旅程中间添加一个REST API调用:因此,您应该能够使用自定义代码创建用户、分配权限等。您可以在用户旅程中间添加一个REST API调用:因此,您应该能够使用自定义代码创建用户、分配权限等。谢谢Chris-我希望我可以在不知道其-user-object-id的情况下执行此操作。其想法是B2C在用户首次到达时出色地链接帐户并为我填充其用户对象id,也许是根据电子邮件地址进行匹配。嗨@MarkArnold,我已经更新了上面的答案,解释了如何在电子邮件地址上实现帐户链接。太好了!谢谢你,克里斯!Chris-您是否介意详细介绍一下您上次关于将SocialidUserId从sub映射到oid的评论?似乎现在AAD OpenIDConnect技术配置文件中有一个issuerUserId映射。Hi@MarkArnold。是的,在策略示例中,索赔名称似乎已从SocialidUserId更改为issuerUserId。尽管如此,Azure AD发布的子声明是一个成对标识符-即,每个依赖方应用程序的子声明是不同的。因此,如果您要将标识从现有应用迁移到B2C,那么您必须映射公共标识,即oid声明,这是相同的
对于所有RP应用程序。谢谢Chris-我希望我可以在不知道其-user-object-id的情况下完成此操作。想法是B2C在用户首次到达时出色地链接帐户并为我填充其用户对象id,也许是根据电子邮件地址进行匹配。嗨@MarkArnold,我已经更新了上面的答案,解释了如何在电子邮件地址上实现帐户链接。太好了!谢谢你,克里斯!Chris-您是否介意详细介绍一下您上次关于将SocialidUserId从sub映射到oid的评论?似乎现在AAD OpenIDConnect技术配置文件中有一个issuerUserId映射。Hi@MarkArnold。是的,在策略示例中,索赔名称似乎已从SocialidUserId更改为issuerUserId。尽管如此,Azure AD发布的子声明是一个成对标识符-即,每个依赖方应用程序的子声明是不同的。因此,如果您要将标识从现有应用迁移到B2C,那么您必须映射公共标识符,即oid声明,这对于所有RP应用都是相同的。