ユーザーをAzureB2C ActiveDirectoryに一括アップロードするJavaコンソールアプリケーション

Aug 21 2020

ローカルSQLデータベースからAzureb2c ActiveDirectoryにユーザーを一括アップロードするJavaコンソールアプリケーションを作成しようとしています。作成したJSONファイルがあります

{
  "users": [
    {
      "displayName": "Amanda Polly",
      "givenName": "Amanda",
      "surname": "Polly",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "emailAddress",
          "issuerAssignedId": "[email protected]"
        }
      ],
      "extension_timezone": "PST",
      "extension_locale": "en-US",
      "extension_tenant": "EG1234"
    },
    {
      "displayName": "Lowa Doe",
      "givenName": "Lowa",
      "surname": "Doe",
      "extension_user_type": "user",
      "identities": [
        {
          "signInType": "userName",
          "issuerAssignedId": "lowadow123"
        }
      ],
      "extension_timezone": "PST",
      "extension_locale": "en-US",
      "extension_tenant": "EG1234"
    }
   ]
}

これらは私がB2Cで作成したいユーザーです、これを開始するのに助けが必要です、私はマイクロソフトグラフAPIを使用する必要があります、誰でも私を導くことができます、私はトークンとclientIDについて読みましたがそれを理解できませんでした。

この状態で長時間スタックします。JSONへの逆シリアル化

回答

1 AllenWu Aug 21 2020 at 06:29

Microsoft Graphを呼び出すには、アプリがMicrosoftIDプラットフォームからアクセストークンを取得する必要があります。アクセストークンには、アプリに関する情報と、MicrosoftGraphを介して利用できるリソースとAPIに対するアプリの権限が含まれています。アクセストークンを取得するには、アプリをMicrosoft IDプラットフォームに登録し、必要なMicrosoftGraphリソースへのアクセスをユーザーまたは管理者から承認する必要があります。

一般的な認証フローには、client_credentialsフローとauthorization_codeフローの2種類があります。前者はアプリのみで、後者はアプリ+ユーザーです。

ここでは、例として「client_credentialsflow」を取り上げます。

まず、アプリを登録する必要があります。詳細な手順はこちら。Azure ADアプリで、User.ReadWrite.Allアプリケーションのアクセス許可を追加して同意を与えることを忘れないでください。

権限を追加したら、[ {yourtenant}の管理者同意を付与する]をクリックすることを忘れないでください(以下を参照)。

クライアントシークレットを作成する必要があります。(後で表示されないため、作成したら記録してください)。

また、後で使用するためにアプリケーションID(クライアントID)を記録することを忘れないでください。

これで、Microsoft Graph Java SDKをプロジェクトにインストールして、次のようなクライアント資格情報プロバイダーを実装できます。

ClientCredentialProvider authProvider = new ClientCredentialProvider(
                                                    clientId,
                                                    scopes,
                                                    clientSecret,
                                                    tenant,
                                                    endpoint);

前の手順から取得する必要がclientIdありclientSecretます。scopesである必要があります"https://graph.microsoft.com/.default"tenantB2CテナントのテナントIDである必要があります。endpointMicrosoftのNATIONAL_CLOUDです。こちらのサンプルをご覧ください。

次に、次のコードを使用してユーザーを作成できます。こちらのリファレンスを参照してください。

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();

User user = new User();
user.displayName = "John Smith";
LinkedList<ObjectIdentity> identitiesList = new LinkedList<ObjectIdentity>();
ObjectIdentity identities = new ObjectIdentity();
identities.signInType = "userName";
identities.issuer = "contoso.onmicrosoft.com";
identities.issuerAssignedId = "johnsmith";
identitiesList.add(identities);
ObjectIdentity identities1 = new ObjectIdentity();
identities1.signInType = "emailAddress";
identities1.issuer = "contoso.onmicrosoft.com";
identities1.issuerAssignedId = "[email protected]";
identitiesList.add(identities1);
ObjectIdentity identities2 = new ObjectIdentity();
identities2.signInType = "federated";
identities2.issuer = "facebook.com";
identities2.issuerAssignedId = "5eecb0cd";
identitiesList.add(identities2);
user.identities = identitiesList;
PasswordProfile passwordProfile = new PasswordProfile();
passwordProfile.password = "password-value";
passwordProfile.forceChangePasswordNextSignIn = false;
user.passwordProfile = passwordProfile;
user.passwordPolicies = "DisablePasswordExpiration";

graphClient.users()
    .buildRequest()
    .post(user);

必要に応じてコードを変更します。

また、拡張属性を追加する場合は、CreateextensionPropertyを参照する必要があります。最初にextensionPropertyを作成してから、拡張属性を持つユーザーを作成する必要があります。ロジックについては、別の回答を参照してください。(「次に、claimsMappingPolicyを作成する:」の前にコンテンツを調べる必要があります)