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

Microsoft Graph では、お使いの Azure AD B2C ディレクトリ内のリソースを管理できます。 次の Microsoft Graph API 操作は、ユーザー、ID プロバイダー、ユーザーフロー、カスタム ポリシー、およびポリシー キーなど、Azure AD B2C リソースの管理に対してサポートされています。 次のセクションの各リンクは、その操作の Microsoft Graph API リファレンス内の対応するページを対象としています。

注意

また、Azure サブスクリプションにリンクされている対応の Azure リソースと共に、Azure AD B2C ディレクトリ自体をプログラムによって作成することもできます。 この機能は Microsoft Graph API ではなく、Azure REST API を通じて公開されます。 詳細については、「B2C テナント - 作成」を参照してください。

Microsoft Graph API を使用した Azure AD B2C ユーザーの移行については、こちらのビデオをご覧ください。

[前提条件]

MS Graph API を使用し、Azure AD B2C テナント内のリソースを操作するには、そのためのアクセス許可を付与するアプリケーション登録が必要になります。 「Microsoft Graph を使用して Azure AD B2C を管理する」という記事の手順に従って、管理アプリケーションで使用できるアプリケーション登録を作成します。

[ユーザー管理]

注意

Azure AD B2C では、現在のところ、ディレクトリ オブジェクトに対する高度なクエリ機能はサポートされていません。 これは、クエリ パラメーター $count および $search と、$filter クエリ パラメーターの演算子 Not (not)、Not equals (ne)、Ends with (endsWith) がサポートされていないことを意味します。 詳細については、Microsoft Graph のクエリ パラメーターMicrosoft Graph の高度なクエリ機能に関するページを参照してください。

ユーザーの電話番号の管理 (ベータ)

SMS または音声通話あるいは多要素認証を使用してサインインするためにユーザーが使用できる電話番号。 詳細については、Azure AD 認証方法の API に関する記事を参照してください。

リスト操作では、有効な電話番号のみが返されることに注意してください。 リスト操作で使用するためには、次の電話番号を有効にする必要があります。

Enable phone sign-in

注意

現在のベータ版では、この API は、国番号と電話番号の間にスペースを入れて電話番号が格納されている場合にのみ機能します。 Azure AD B2C サービスでは、このスペースは現在既定では追加されていません。

セルフサービス パスワード リセットのメール アドレス (ベータ)

パスワードをリセットするためにユーザー名サインイン アカウントで使用できるメール アドレス。 詳細については、Azure AD 認証方法の API に関する記事を参照してください。

ソフトウェア OATH トークンの認証方法 (ベータ)

ソフトウェア OATH トークンは、ソフトウェアベースの数値ジェネレーターで Authenticator アプリを使用して多要素認証に OATH 時間ベースのワンタイム パスワード (TOTP) 標準を使用します。 ユーザーに登録されているソフトウェア OATH トークンを管理するには、Microsoft Graph API を使用します。

ID プロバイダー

Azure AD B2C テナントのユーザー フローで使用できる ID プロバイダーを管理します。

ユーザー フロー

サインアップ、サインイン、パスワードのリセット、プロファイルの更新のための事前構築されたポリシーを構成します。

ユーザー フローの認証方法 (ベータ)

ローカル アカウントを使用してユーザーが登録を実行できるメカニズムを選択します。 ローカル アカウントは、Azure AD が ID アサーションを行うアカウントです。 詳細については、「b2cAuthenticationMethodsPolicy リソースの種類」を参照してください。

カスタム ポリシー

次の操作を使用すると、カスタムポリシーと呼ばれる Azure AD B2C 信頼フレームワーク ポリシーを管理できます。

ポリシー キー

Identity Experience Framework では、カスタムポリシーで参照されているシークレットを格納して、コンポーネント間の信頼を確立します。 これらのシークレットは、対称キー/値または非対称キー/値にすることができます。 Azure portal では、これらのエンティティはポリシーキーとして表示されます。

Microsoft Graph API のポリシー キーの最上位レベルのリソースは、Trusted Framework Keysetです。 各 キーセット には、少なくとも1つの キーが含まれています。 キーを作成するには、最初に空のキーセットを作成してから、キーセットにキーを生成します。 手動シークレットを作成したり、証明書をアップロードしたり、または PKCS12 キーを使用したりすることができます。 キーには、生成されたシークレット、文字列 (Facebook アプリケーション シークレットなど)、またはアップロードする証明書を指定できます。 キーセットに複数のキーがある場合、1つのキーのみがアクティブになります。

信頼フレームワーク ポリシー キーセット

信頼フレームワーク ポリシー キー

アプリケーション

アプリケーション拡張機能プロパティ

Azure AD B2Cでは、1ユーザーあたり100個の拡張子値を保持できるディレクトリを提供しています。 ユーザーの拡張子値を管理するには、Microsoft Graph の以下の[ユーザー API]を使用します。

  •      ユーザーの更新: 拡張プロパティの値をユーザーに書き込むか、ユーザーから削除します。
  •      ユーザーを取得する: ユーザーの拡張プロパティ値を取得します。 拡張プロパティは、既定では、 beta エンドポイントを介して返されますが、$selectからv1.0エンドポイント経由でのみ返されます。

監査ログ

Azure AD B2C 監査ログにアクセスする方法の詳細については、「Azure AD B2C 監査ログにアクセスする」を参照してください。

条件付きアクセス

プログラムで Microsoft Graph を管理する方法

Microsoft Graph を管理するには、アプリケーションのアクセス許可を使用してアプリケーションとして実行するか、委任されたアクセス許可を使用できます。 委任されたアクセス許可では、アプリが要求するアクセス許可にユーザーまたは管理者が同意します。 目的のリソースに対する呼び出しを行うときにサインインしたユーザーとして振る舞う権限を、アプリに委任します。 アプリケーションのアクセス許可は、サインインしているユーザーを必要とせず、アプリケーションのアクセス許可を必要とするアプリによって使用されます。 この理由から、管理者だけがアプリケーションのアクセス許可に同意できます。

注意

ユーザー フローまたはカスタム ポリシーでサインインしたユーザーに対する委任されたアクセス許可は、Microsoft Graph の委任されたアクセス許可に対して使用できません。

コード サンプル:プログラムによってユーザー アカウントを管理する方法

このコード サンプルは、Microsoft Graph SDK を使用して Microsoft Graph API と対話する .NET Core コンソール アプリケーションです。 このコードは、API を呼び出して、Azure AD B2C テナント内のユーザーをプログラムで管理する方法を示しています。 サンプル アーカイブ (*.zip) をダウンロードするか、GitHub のリポジトリを参照するか、リポジトリを複製することができます。

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

コード サンプルを入手したら、環境に合わせて構成し、プロジェクトをビルドします。

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

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

  3. appSettings」セクションで、your-b2c-tenant をテナントの名前に、Application (client) IDClient secret を管理アプリケーション登録の値に置き換えます。 詳しくは、「Microsoft Graph アプリケーションを登録する」をご覧ください。

  4. リポジトリのローカル複製内でコンソール ウィンドウを開き、src ディレクトリに切り替えてから、プロジェクトをビルドします。

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

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

アプリケーションで、実行可能なコマンドの一覧が表示されます。 たとえば、すべてのユーザーの取得、単一ユーザーの取得、ユーザーの削除、ユーザーのパスワードの更新、一括インポートなどです。

注意

アプリケーションでユーザー アカウントのパスワードを更新するには、アプリケーションにユーザー管理者ロールを付与する必要があります。

コードの説明

このサンプル コードでは、Microsoft Graph にアクセスする高品質かつ効率的で回復性があるアプリケーションを簡単に構築できるように設計されている、Microsoft Graph SDK を使用します。

Microsoft Graph API への要求には、認証のためのアクセス トークンが必要になります。 このソリューションでは、Microsoft Graph SDK で使用する Microsoft Authentication Library (MSAL) の認証シナリオベースのラッパーを提供する、 Microsoft.Graph.Auth NuGet パッケージを使用します。

Program.cs ファイル内の RunAsync メソッド:

  1. appsettings.json ファイルからアプリケーション設定を読み取ります
  2. OAuth 2.0 クライアント資格情報の付与フローを使用して、認証プロバイダーを初期化します。 クライアント資格情報の付与フローを使用すると、アプリは Microsoft Graph API を呼び出すためのアクセス トークンを取得できます。
  3. 認証プロバイダーを使用して Microsoft Graph サービス クライアントを設定します。
// Read application settings from appsettings.json (tenant ID, app ID, client secret, etc.)
AppSettings config = AppSettingsFile.ReadFromJsonFile();

// Initialize the client credential auth provider
var scopes = new[] { "https://graph.microsoft.com/.default" };
var clientSecretCredential = new ClientSecretCredential(config.TenantId, config.AppId, config.ClientSecret);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

次に、初期化された GraphServiceClientUserService.cs で使用して、ユーザー管理操作を実行します。 たとえば、次のようにしてテナント内のユーザー アカウントの一覧を取得します。

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

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

        // Iterate over all the users in the directory
        var pageIterator = PageIterator<User>
            .CreatePageIterator(
                graphClient,
                users,
                // Callback executed for each user in the collection
                (user) =>
                {
                    Console.WriteLine(JsonSerializer.Serialize(user));
                    return true;
                },
                // Used to configure subsequent page requests
                (req) =>
                {
                    Console.WriteLine($"Reading next page of users...");
                    return req;
                }
            );

        await pageIterator.IterateAsync();
    }
    catch (Exception ex)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(ex.Message);
        Console.ResetColor();
    }
}

Microsoft Graph SDK を使用した API 呼び出しに関する記事には、Microsoft Graph から情報を読み書きする方法、$select を使用して返されるプロパティを制御する方法、カスタム クエリ パラメーターを指定する方法、$filter および $orderBy のクエリ パラメーターを使用する方法に関する情報が含まれています。