사용자를 Azure B2C Active Directory에 대량 업로드하기위한 Java 콘솔 애플리케이션
로컬 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으로 역 직렬화
답변
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"
. tenant
B2C 테넌트의 테넌트 ID 여야합니다. endpoint
Microsoft의 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 :" 전에 콘텐츠를 살펴보기 만하면됩니다. )