Microsoft Graph を使用して Azure AD B2C ユーザー アカウントを管理するManage Azure AD B2C user accounts with Microsoft Graph

Microsoft Graph を使用すると、Microsoft Graph API で作成、読み取り、更新、および削除の各メソッドを指定することで、Azure AD B2C ディレクトリ内のユーザー アカウントを管理できます。Microsoft Graph allows you to manage user accounts in your Azure AD B2C directory by providing create, read, update, and delete methods in the Microsoft Graph API. 既存のユーザー ストアを Azure AD B2C テナントに移行し、Microsoft Graph API を呼び出すことによって、他のユーザー アカウント管理操作を実行することができます。You can migrate an existing user store to an Azure AD B2C tenant and perform other user account management operations by calling the Microsoft Graph API.

以下のセクションでは、Microsoft Graph API を使用した Azure AD B2C ユーザー管理の主要な側面について説明します。In the sections that follow, the key aspects of Azure AD B2C user management with the Microsoft Graph API are presented. ここで説明する Microsoft Graph API の操作、種類、およびプロパティは、Microsoft Graph API リファレンス ドキュメントに記載されているもののサブセットです。The Microsoft Graph API operations, types, and properties presented here are a subset of that which appears in the Microsoft Graph API reference documentation.

管理アプリケーションを登録するRegister a management application

作成したユーザー管理アプリケーションやスクリプトが Azure AD B2C テナント内のリソースと対話できるようにするには、その操作を実行するためのアクセス許可を付与するアプリケーション登録が必要です。Before any user management application or script you write can interact with the resources in your Azure AD B2C tenant, you need an application registration that grants the permissions to do so.

この操作方法に関する記事の手順に従って、管理アプリケーションで使用できるアプリケーション登録を作成します。Follow the steps in this how-to article to create an application registration that your management application can use:

Microsoft Graph を使用して Azure AD B2C を管理するManage Azure AD B2C with Microsoft Graph

Microsoft Graph のユーザー管理操作User management Microsoft Graph operations

Microsoft Graph API では次のユーザー管理操作を使用できます。The following user management operations are available in the Microsoft Graph API:

ユーザー プロパティUser properties

表示名プロパティDisplay name property

displayName は、ユーザーに対して Azure portal ユーザー管理で表示され、Azure AD B2C がアプリケーションに返すアクセス トークンで表示される名前です。The displayName is the name to display in Azure portal user management for the user, and in the access token Azure AD B2C returns to the application. このプロパティは必須です。This property is required.

ID プロパティIdentities property

顧客アカウント (コンシューマー、パートナー、または一般ユーザー) は、次の ID の種類に関連付けることができます。A customer account, which could be a consumer, partner, or citizen, can be associated with these identity types:

  • ローカル ID - ユーザー名とパスワードは、Azure AD B2C ディレクトリにローカルに格納されます。Local identity - The username and password are stored locally in the Azure AD B2C directory. これらの ID は、"ローカル アカウント" とよく呼ばれます。We often refer to these identities as "local accounts."
  • フェデレーション ID - "ソーシャル" または "エンタープライズ" アカウントとも呼ばれ、ユーザーの ID は、Facebook、Microsoft、ADFS、Salesforce などのフェデレーション ID プロバイダーによって管理されます。Federated identity - Also known as a social or enterprise accounts, the identity of the user is managed by a federated identity provider like Facebook, Microsoft, ADFS, or Salesforce.

顧客アカウントを持つユーザーは、複数の ID でサインインできます。A user with a customer account can sign in with multiple identities. たとえば、ユーザー名、電子メール、従業員 ID、政府 ID などです。For example, username, email, employee ID, government ID, and others. 1 つのアカウントで、同じパスワードを持つ複数の ID (ローカルとソーシャルの両方) を持つことができます。A single account can have multiple identities, both local and social, with the same password.

Microsoft Graph API では、ローカル ID とフェデレーション ID の両方が、objectIdentity 型のユーザー identities 属性に格納されます。In the Microsoft Graph API, both local and federated identities are stored in the user identities attribute, which is of type objectIdentity. identities コレクションは、ユーザー アカウントへのサインインに使用される一連の ID を表します。The identities collection represents a set of identities used to sign in to a user account. このコレクションにより、ユーザーは、関連付けられた任意の ID を使用してユーザー アカウントにサインインできます。This collection enables the user to sign in to the user account with any of its associated identities.

プロパティProperty TypeType 説明Description
signInTypesignInType stringstring お使いのディレクトリ内のユーザー サインインの種類を指定します。Specifies the user sign-in types in your directory. ローカル アカウントの場合: emailAddressemailAddress1emailAddress2emailAddress3userName、または他の任意の種類。For local account: emailAddress, emailAddress1, emailAddress2, emailAddress3, userName, or any other type you like. ソーシャル アカウントは federated に設定する必要があります。Social account must be set to federated.
発行者issuer stringstring ID の発行者を指定します。Specifies the issuer of the identity. ローカル アカウント (signInTypefederated でない) の場合、このプロパティは、ローカル B2C テナントの既定のドメイン名 (contoso.onmicrosoft.com など) になります。For local accounts (where signInType is not federated), this property is the local B2C tenant default domain name, for example contoso.onmicrosoft.com. ソーシャル ID (signInTypefederated) の場合、値は発行者の名前 (facebook.com など) になります。For social identity (where signInType is federated) the value is the name of the issuer, for example facebook.com
issuerAssignedIdissuerAssignedId stringstring 発行者がユーザーに割り当てる一意識別子を指定します。Specifies the unique identifier assigned to the user by the issuer. issuerissuerAssignedId の組み合わせは、テナント内で一意である必要があります。The combination of issuer and issuerAssignedId must be unique within your tenant. ローカル アカウントの場合、signInTypeemailAddress または userName に設定されているときは、ユーザーのサインイン名を表します。For local account, when signInType is set to emailAddress or userName, it represents the sign-in name for the user.
signInType が次のように設定されている場合:When signInType is set to:
  • emailAddress (または、emailAddress1 のように emailAddress で始まる)。issuerAssignedId は有効なメール アドレスである必要がありますemailAddress (or starts with emailAddress like emailAddress1) issuerAssignedId must be a valid email address
  • userName (または、その他の値)。issuerAssignedId は、メール アドレスの有効なローカル部分である必要がありますuserName (or any other value), issuerAssignedId must be a valid local part of an email address
  • federatedissuerAssignedId は、フェデレーション アカウントの一意識別子を表しますfederated, issuerAssignedId represents the federated account unique identifier

次の Identities プロパティ。サインイン名を含むローカル アカウント ID、サインインとしての電子メール アドレス、およびソーシャル ID が含まれます。The following Identities property, with a local account identity with a sign-in name, an email address as sign-in, and with a social identity.

"identities": [
    {
      "signInType": "userName",
      "issuer": "contoso.onmicrosoft.com",
      "issuerAssignedId": "johnsmith"
    },
    {
      "signInType": "emailAddress",
      "issuer": "contoso.onmicrosoft.com",
      "issuerAssignedId": "jsmith@yahoo.com"
    },
    {
      "signInType": "federated",
      "issuer": "facebook.com",
      "issuerAssignedId": "5eecb0cd"
    }
  ]

フェデレーション ID の場合、ID プロバイダーによっては、issuerAssignedId は、アプリケーションごとの特定のユーザーまたは開発アカウントの一意の値です。For federated identities, depending on the identity provider, the issuerAssignedId is a unique value for a given user per application or development account. ソーシャル プロバイダーまたは同じ開発アカウント内の別のアプリケーションによって割り当てられたのと同じアプリケーション ID で Azure AD B2C ポリシーを構成します。Configure the Azure AD B2C policy with the same application ID that was previously assigned by the social provider or another application within the same development account.

パスワード プロファイル プロパティPassword profile property

ローカル ID の場合、passwordProfile プロパティが必須であり、これにはユーザーのパスワードが含まれています。For a local identity, the passwordProfile property is required, and contains the user's password. forceChangePasswordNextSignIn プロパティは false に設定する必要があります。The forceChangePasswordNextSignIn property must set to false.

フェデレーション (ソーシャル) ID の場合、passwordProfile プロパティは必要ありません。For a federated (social) identity, the passwordProfile property is not required.

"passwordProfile" : {
    "password": "password-value",
    "forceChangePasswordNextSignIn": false
  }

パスワード ポリシー プロパティPassword policy property

Azure AD B2C の (ローカル アカウントの) パスワード ポリシーは、Azure Active Directory の強力なパスワード強度ポリシーに基づいています。The Azure AD B2C password policy (for local accounts) is based on the Azure Active Directory strong password strength policy. Azure AD B2C のサインアップまたはサインインとパスワード リセットの各ポリシーでは、この強力なパスワード強度を必要とし、パスワードに有効期限がありません。The Azure AD B2C sign-up or sign-in and password reset policies require this strong password strength, and don't expire passwords.

ユーザー移行シナリオでは、移行するアカウントのパスワード強度が、Azure AD B2C によって適用された強力なパスワード強度より弱い場合は、強力なパスワードという要件を無効にすることができます。In user migration scenarios, if the accounts you want to migrate have weaker password strength than the strong password strength enforced by Azure AD B2C, you can disable the strong password requirement. 既定のパスワード ポリシーを変更するには、passwordPolicies プロパティを DisableStrongPassword に設定します。To change the default password policy, set the passwordPolicies property to DisableStrongPassword. たとえば、ユーザー作成要求を次のように変更できます。For example, you can modify the create user request as follows:

"passwordPolicies": "DisablePasswordExpiration, DisableStrongPassword"

拡張機能プロパティExtension properties

すべての顧客向けアプリケーションには、収集する情報についての固有の要件があります。Every customer-facing application has unique requirements for the information to be collected. Azure AD B2C テナントには、名、姓、市区町村、郵便番号などのプロパティに格納された組み込みの一連の情報が用意されています。Your Azure AD B2C tenant comes with a built-in set of information stored in properties, such as Given Name, Surname, City, and Postal Code. Azure AD B2C では、各顧客アカウントに格納されている一連のプロパティを拡張できます。With Azure AD B2C, you can extend the set of properties stored in each customer account. カスタム属性の定義の詳細については、カスタム属性 (ユーザー フロー) およびカスタム属性 (カスタムポリシー) に関する記事を参照してください。For more information on defining custom attributes, see custom attributes (user flows) and custom attributes (custom policies).

Microsoft Graph API では、拡張属性を使用したユーザーの作成と更新がサポートされています。Microsoft Graph API supports creating and updating a user with extension attributes. Graph API の拡張属性には、extension_ApplicationObjectID_attributename という規則を使って名前が付けられます。Extension attributes in the Graph API are named by using the convention extension_ApplicationObjectID_attributename. 次に例を示します。For example:

"extension_831374b3bd5041bfaa54263ec9e050fc_loyaltyNumber": "212342"

コード サンプルCode sample

このコード サンプルは、Microsoft Graph SDK を使用して Microsoft Graph API と対話する .NET Core コンソール アプリケーションです。This code sample is a .NET Core console application that uses the Microsoft Graph SDK to interact with Microsoft Graph API. このコードは、API を呼び出して、Azure AD B2C テナント内のユーザーをプログラムで管理する方法を示しています。Its code demonstrates how to call the API to programmatically manage users in an Azure AD B2C tenant. サンプル アーカイブ (*.zip) をダウンロードするか、GitHub のリポジトリを参照するか、リポジトリを複製することができます。You can download the sample archive (*.zip), browse the repository on GitHub, or clone the repository:

git clone https://github.com/Azure-Samples/ms-identity-dotnetcore-b2c-account-management.git

コード サンプルを入手したら、環境に合わせて構成し、プロジェクトをビルドします。After you've obtained the code sample, configure it for your environment and then build the project:

  1. Visual Studio または Visual Studio Code でプロジェクトを開きます。Open the project in Visual Studio or Visual Studio Code.

  2. src/appsettings.jsonを開きます。Open src/appsettings.json.

  3. appSettings」セクションで、your-b2c-tenant をテナントの名前に、Application (client) IDClient secret を管理アプリケーション登録の値に置き換えます (この記事の「管理アプリケーションを登録する」のセクションを参照してください)。In the appSettings section, replace your-b2c-tenant with the name of your tenant, and Application (client) ID and Client secret with the values for your management application registration (see the Register a management application section of this article).

  4. リポジトリのローカル複製内でコンソール ウィンドウを開き、src ディレクトリに切り替えてから、プロジェクトをビルドします。Open a console window within your local clone of the repo, switch into the src directory, then build the project:

    cd src
    dotnet build
    
  5. dotnet コマンドを使用してアプリケーションを実行します。Run the application with the dotnet command:

    dotnet bin/Debug/netcoreapp3.0/b2c-ms-graph.dll
    

アプリケーションで、実行可能なコマンドの一覧が表示されます。The application displays a list of commands you can execute. たとえば、すべてのユーザーの取得、単一ユーザーの取得、ユーザーの削除、ユーザーのパスワードの更新、一括インポートなどです。For example, get all users, get a single user, delete a user, update a user's password, and bulk import.

コードの説明Code discussion

このサンプル コードでは、Microsoft Graph にアクセスする高品質かつ効率的で回復性があるアプリケーションを簡単に構築できるように設計されている、Microsoft Graph SDK を使用します。The sample code uses the Microsoft Graph SDK, which is designed to simplify building high-quality, efficient, and resilient applications that access Microsoft Graph.

Microsoft Graph API への要求には、認証のためのアクセス トークンが必要になります。Any request to the Microsoft Graph API requires an access token for authentication. このソリューションでは、Microsoft Graph SDK で使用する Microsoft Authentication Library (MSAL) の認証シナリオベースのラッパーを提供する、 Microsoft.Graph.Auth NuGet パッケージを使用します。The solution makes use of the Microsoft.Graph.Auth NuGet package that provides an authentication scenario-based wrapper of the Microsoft Authentication Library (MSAL) for use with the Microsoft Graph SDK.

Program.cs ファイル内の RunAsync メソッド:The RunAsync method in the Program.cs file:

  1. appsettings.json ファイルからアプリケーション設定を読み取りますReads application settings from the appsettings.json file

  2. OAuth 2.0 クライアント資格情報の付与フローを使用して、認証プロバイダーを初期化します。Initializes the auth provider using OAuth 2.0 client credentials grant flow. クライアント資格情報の付与フローを使用すると、アプリは Microsoft Graph API を呼び出すためのアクセス トークンを取得できます。With the client credentials grant flow, the app is able to get an access token to call the Microsoft Graph API.

  3. 認証プロバイダーを使用して Microsoft Graph サービス クライアントを設定します。Sets up the Microsoft Graph service client with the auth provider:

    // Read application settings from appsettings.json (tenant ID, app ID, client secret, etc.)
    AppSettings config = AppSettingsFile.ReadFromJsonFile();
    
    // Initialize the client credential auth provider
    IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
        .Create(config.AppId)
        .WithTenantId(config.TenantId)
        .WithClientSecret(config.ClientSecret)
        .Build();
    ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
    
    // Set up the Microsoft Graph service client with client credentials
    GraphServiceClient graphClient = new GraphServiceClient(authProvider);
    

次に、初期化された GraphServiceClientUserService.cs で使用して、ユーザー管理操作を実行します。The initialized GraphServiceClient is then used in UserService.cs to perform the user management operations. たとえば、次のようにしてテナント内のユーザー アカウントの一覧を取得します。For example, getting a list of the user accounts in the tenant:

public static async Task ListUsers(GraphServiceClient graphClient)
{
    Console.WriteLine("Getting list of users...");

    // Get all users (one page)
    var result = await graphClient.Users
        .Request()
        .Select(e => new
        {
            e.DisplayName,
            e.Id,
            e.Identities
        })
        .GetAsync();

    foreach (var user in result.CurrentPage)
    {
        Console.WriteLine(JsonConvert.SerializeObject(user));
    }
}

Microsoft Graph SDK を使用した API 呼び出しに関する記事には、Microsoft Graph から情報を読み書きする方法、$select を使用して返されるプロパティを制御する方法、カスタム クエリ パラメーターを指定する方法、$filter および $orderBy のクエリ パラメーターを使用する方法に関する情報が含まれています。Make API calls using the Microsoft Graph SDKs includes information on how to read and write information from Microsoft Graph, use $select to control the properties returned, provide custom query parameters, and use the $filter and $orderBy query parameters.

次のステップNext steps

Azure AD B2C リソースでサポートされている Microsoft Graph API 操作の完全なインデックスについては、「Azure AD B2C に使用可能な Microsoft Graph 操作」を参照してください。For a full index of the Microsoft Graph API operations supported for Azure AD B2C resources, see Microsoft Graph operations available for Azure AD B2C.