2

最近、プログラムで 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: アプリケーション 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' は、この API バージョンではサポートされていません。

このエラーから何を推測できますか? Azure AD B2C の Graph アクセスが一時的に削除されたということですか? または、何かを有効にする必要がありますか? または、エンドポイント URL の 1 つが間違っていますか?

4

1 に答える 1

2

Graph API に接続するには、別の clientId と secret をセットアップする必要があります。この B2C チュートリアルに従って、サービス プリンシパルを作成し、3 つのグラフ 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)"
于 2016-05-19T13:32:08.563 に答える