Graph API実行環境の準備方法(クライアント資格情報フローのアプリ登録)

概要

  • WebアプリからGraphAPIを使用してAzure AD B2C上のユーザアカウントの操作を行うことを想定しています。このような構成でGraph APIを使用できるようにするためのAzure AD B2C側の設定方法を説明します。
  • Azure AD B2Cでは、Webアプリ、デスクトップアプリ、モバイルアプリ等のアプリケーションの種類に応じて認証方法(フロー)が用意されています。ここでは「クライアント資格情報フロー」を使う前提で説明します。
  • ここで登録したアプリを使用したGraph APIのサンプルをこちらで紹介しています。
    NDW

    目次 1 概要2 実行環境の準備3 サンプルコード3.1 プロジェクト構成3.2 メイン3.3 認証プロバイダの実装3.…

実行環境の準備

  1. Azureポータルにログイン
  2. アプリの新規登録
    [Azure AD B2C]リソースを選択し、[アプリの登録]メニューの[新規登録]をクリックする。
  3. 次の内容を入力し、[登録]をクリックする。
    • [名前]: “GraphApiTest” ※任意の名前を指定可
    • [サポートされているアカウントの種類]: [この組織ディレクトリのみに含まれるアカウント]
      (この例では、Google, Twitter等の外部や別テナントを使用する予定はなく、Azure AD B2Cローカルアカウントのみを使用する想定のため。)
    • [リダイレクトURI]: (指定不要)
      (クライアント資格情報フローでは、リダイレクトを使用しないため)

  4. クライアントID、テナントIDの確認
    登録したアプリの概要が表示されるので、クライアントID, テナントIDをどこかに控えておきます。
  5. アプリの認証に使用するシークレットの作成
    メニューの[証明書とシークレット]を選択し、[新しいクライアントシークレット]をクリックし、新しい任意のシークレットを作成します。

    • 証明書を使用した方がより安全ですが、検証のためより簡単なシークレットを使用しています。
    • シークレットの値は次回表示時に参照できなくなってしまうので、どこかに控えてください。

  6. ユーザアカウント操作のための権限付与
    1. [Azure Active Directory]リソースの[ロールと管理者]メニューを選択し、[ユーザー管理者]をクリックします。
    2. [割り当ての追加]をクリックし、追加したアプリGraphApiTestを選択後、[追加]します。
      (既定ではユーザアカウントしか表示されませんが、名称で検索できます。)
  7. B2C拡張アプリのクライアントIDの確認 ※拡張属性を操作する場合のみ必要
    [Azure AD B2C]リソースの[アプリの登録]メニューを選択し、[すべてのアプリケーション]をクリックします。
    表示された”b2c-extensions-app”アプリのクライアントIDを、どこかに控えます。

補足事項

  • 権限の設定については、次の情報を参考にしています。
    Microsoft Graph を使用して Azure AD B2C を管理する
    当初、[Directory.ReadWrite.All]のアクセス許可が必要かと思ったのですが、ユーザー管理者ロールの付与で問題ないようです。
  • ユーザー管理者ロールを付与しない場合、個別に次のアクセス許可やロールが必要です。
    • Azure AD B2Cの登録アプリの[APIとアクセス許可]-[アプリケーションの許可]から、[Directory.ReadWrite.All](ディレクトリ全般の操作のため)、[User.ReadWrite.All](ユーザアカウントの削除のため)を追加を追加し、同意する。
    • [Azure Active Directory]リソースの[ロールと管理者]メニューから、[ヘルプデスク管理者]ロールに”GraphApiTest”を追加する。
  • アプリ登録の[認証]にあるパブリッククライアントの設定について
    • [認証]-[アプリケーションはパブリッククライアントとして扱います。]という設定があり、選択肢「はい」か「いいえ」があります。今回のクライアント資格情報フローではリダイレクトを使用しないので、どちらか選択する必要があります。
    • この項目は、Open ID Connect(OAuth2)の”Client Types”に対応するようで、RFC上では”public client”または”confidential client”の選択肢があります。
      RFC 6749: The OAuth 2.0 Authorization Framework
    • 今回の場合、資格情報をサーバ上に保持するWebサーバを想定しており、RFCの解釈では”confidential client”(パブリッククライアントではない)となります。そのため、前述の選択肢は既定値の「いいえ」となり、上記の手順には含めていません。