【问题标题】:Create an Azure AD B2C (Preview) User Programmatically以编程方式创建 Azure AD B2C(预览版)用户
【发布时间】:2016-05-18 15:18:17
【问题描述】:

我最近尝试以编程方式在我的 Azure AD B2C(预览版)实例中创建用户。阻碍我的部分只是试图检索令牌。到目前为止,我已经尝试过:

var clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var clientSecret = @"xxxxxxxxxxxxxxxx";
var tenant = "xxxxxxxxxxxx.onmicrosoft.com";

var authContext = new AuthenticationContext("https://login.microsoftonline.com/" + tenant);

var credential = new ClientCredential(clientId, clientSecret);

var result = await authContext.AcquireTokenAsync("https://graph.windows.net", credential);

当执行到最后一行以尝试获取令牌时,我得到:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException:AADSTS70001:此 API 版本不支持应用程序“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”。

我可以从这个错误中推断出什么?这是否意味着已暂时删除 Azure AD B2C 的 Graph 访问权限?还是我需要启用某些东西?还是我有一个端点 URL 错误?

【问题讨论】:

  • 您在使用 ADAL v2 吗?这是 Graph API 所必需的,而不是 ADAL v4(B2C 所必需的),否则,我假设您遵循本教程:azure.microsoft.com/en-us/documentation/articles/… 它适用于我们的 B2C 创建用户
  • 我有 NuGet 包 Microsoft.IdentityModel.Clients.ActiveDirectory 版本 3.10.30516。你知道我是否需要遵循示例中显示的所有 Powershell 步骤吗?它们似乎是关于设置应用程序和客户端密码的,我似乎可以直接在 Azure 刀片中完成。
  • 是的,您需要创建一个单独的应用程序和客户端密码,B2C 中的那个不可用(权限不足),我们使用的是 2.x 版本的 ADAL 库。跨度>
  • 而且它也适用于 3.10 ADAL 版本,我只是做了一个升级来测试这个。
  • 非常感谢,您的最后 2 个 cmets 对我来说是最后一块拼图。您想将您的 cmets 放入答案中,我可以将其标记为答案吗?

标签: azure-ad-graph-api azure-ad-b2c


【解决方案1】:

要连接到 Graph API,您需要设置单独的 clientId 和 secret。按照此 B2C 教程创建服务主体并附加 3 Graph API 权限:

https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

请务必使用 ADAL v2(或刚刚发布的 ADAL v3),而不是仅针对 B2C 进行实验的 ADAL v4。

未来,MSAL 库有望将所有这些结合起来。

以下脚本允许您在 1 个 powershell 脚本中创建它:

$msolcred = Get-Credential
Connect-MsolService -credential $msolcred

$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)

$principal = New-MsolServicePrincipal -DisplayName "Dummy" -Type password -Value $newClientSecret

Add-MsolRoleMember -RoleObjectId 88d8e3e3-8f55-4a1e-953a-9b9898b8876b -RoleMemberObjectId $principal.ObjectId -RoleMemberType servicePrincipal
Add-MsolRoleMember -RoleObjectId 9360feb5-f418-4baa-8175-e2a00bac4301 -RoleMemberObjectId $principal.ObjectId -RoleMemberType servicePrincipal
Add-MsolRoleMember -RoleObjectId fe930be7-5e62-47db-91af-98c3a49a38b1 -RoleMemberObjectId $principal.ObjectId -RoleMemberType servicePrincipal

Write-Host "clientsecret = $newClientSecret"
Write-Host "clientId     =  $(($principal).AppPrincipalId)"
Write-Host "tenant       = $((Get-MsolDomain).Name)"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 2020-05-23
    • 2019-10-16
    • 2019-08-10
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    相关资源
    最近更新 更多