概要
- WebアプリからGraphAPIを使用してAzure AD B2C上のユーザアカウントの操作を行うことを想定しています。このような構成でGraph APIを使用できるようにするためのAzure AD B2C側の設定方法を説明します。
- Azure AD B2Cでは、Webアプリ、デスクトップアプリ、モバイルアプリ等のアプリケーションの種類に応じて認証方法(フロー)が用意されています。ここでは「クライアント資格情報フロー」を使う前提で説明します。
- ここで登録したアプリを使用したGraph APIのサンプルをこちらで紹介しています。
実行環境の準備
- Azureポータルにログイン
- アプリの新規登録
[Azure AD B2C]リソースを選択し、[アプリの登録]メニューの[新規登録]をクリックする。 - 次の内容を入力し、[登録]をクリックする。
- [名前]: “GraphApiTest” ※任意の名前を指定可
- [サポートされているアカウントの種類]: [この組織ディレクトリのみに含まれるアカウント](この例では、Google, Twitter等の外部や別テナントを使用する予定はなく、Azure AD B2Cローカルアカウントのみを使用する想定のため。)
- [リダイレクトURI]: (指定不要)(クライアント資格情報フローでは、リダイレクトを使用しないため)
- クライアントID、テナントIDの確認
登録したアプリの概要が表示されるので、クライアントID, テナントIDをどこかに控えておきます。 - アプリの認証に使用するシークレットの作成
メニューの[証明書とシークレット]を選択し、[新しいクライアントシークレット]をクリックし、新しい任意のシークレットを作成します。- 証明書を使用した方がより安全ですが、検証のためより簡単なシークレットを使用しています。
- シークレットの値は次回表示時に参照できなくなってしまうので、どこかに控えてください。
- ユーザアカウント操作のための権限付与
- 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”(パブリッククライアントではない)となります。そのため、前述の選択肢は既定値の「いいえ」となり、上記の手順には含めていません。