사용자를 Azure B2C Active Directory에 대량 업로드하기위한 Java 콘솔 애플리케이션

Aug 21 2020

로컬 SQL 데이터베이스에서 Azure b2c 활성 디렉터리로 사용자를 대량 업로드하는 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에서 만들고 싶은 사용자입니다.이를 시작하는 데 도움이 필요합니다. Microsoft 그래프 API를 사용해야합니다. 누구든지 나를 안내 할 수 있으며 토큰과 clientID에 대해 읽었지만 이해할 수 없었습니다.

이 상태로 장시간 붙어 있습니다. JSON으로 역 직렬화

답변

1 AllenWu Aug 21 2020 at 06:29

Microsoft Graph를 호출하려면 앱이 Microsoft ID 플랫폼에서 액세스 토큰을 획득해야합니다. 액세스 토큰에는 앱에 대한 정보와 Microsoft Graph를 통해 사용할 수있는 리소스 및 API에 대한 권한이 포함됩니다. 액세스 토큰을 얻으려면 앱이 Microsoft ID 플랫폼에 등록되고 필요한 Microsoft Graph 리소스에 대한 액세스 권한을 사용자 또는 관리자로부터 받아야합니다.

일반적인 인증 흐름에는 client_credentials 흐름 과 authorization_code 흐름 의 두 가지 종류가 있습니다 . 전자는 앱 전용이고 후자는 앱 + 사용자입니다.

여기서는 "client_credentials flow"를 예로 들어 보겠습니다.

먼저 앱 을 등록해야합니다 . 여기에 더 자세한 단계가 있습니다 . Azure AD 앱에서 User.ReadWrite.All애플리케이션 권한 을 추가하고 동의를 부여해야합니다 .

권한을 추가 한 후 " {your tenant}에 대한 관리자 동의 부여 "를 클릭하는 것을 잊지 마십시오 (아래 참조).

클라이언트 시크릿 생성이 필요합니다. (나중에 볼 수 없기 때문에 생성되면 기록하십시오).

또한 나중에 사용할 수 있도록 응용 프로그램 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);

필요에 따라 코드를 수정하십시오.

또한 확장 속성을 추가하려면 Create extensionProperty 를 참조해야합니다 . 먼저 extensionProperty를 만든 다음 확장 속성을 사용하여 사용자를 만들어야합니다. 논리에 대한 또 다른 대답 을 참조하십시오 . ( "Then create a claimMappingPolicy :" 전에 콘텐츠를 살펴보기 만하면됩니다. )