ADB2CからMicrosoft Graph APIを使ってみる

2023年9月18日

Azure AD B2C テナントをazコマンドで管理していこうと考えていました。
ただ、azコマンドでB2Cのユーザフローを設定する方法などが見つからなかった。
理想としては

  • テナント作成
  • アプリケーションの登録
  • ユーザフローの作成
  • 認証の設定(loginのコールバックURLの設定やlogoutのURL設定)
  • シークレットの登録と更新

これらをAzure pipelineから自動的に登録させるというのがやりたいことになります。
しかし、azコマンドでは色々と制限があることがわかってきました。

調べていくうちに、Microsoft Graph APIでなら上記のうち、azコマンドで操作不可のものも設定できそうというのがわかりました。

ドキュメントを読む

Microsoft Graph APIというのが何かを知る必要がありますが、

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/microsoft-graph-get-started?tabs=app-reg-ga

やりたいことを実現するためのステップ

ADB2Cテナントでアプリケーションを登録する。

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/microsoft-graph-get-started?tabs=app-reg-ga#register-management-application

いつの間にか、Microsoft Entra IDになってた。

B2Cテナント切り替える。

アプリケーションを作成します。

上記の情報で登録します。

  1. [この組織のディレクトリ内のアカウントのみ] を選択します。
  2. [アクセス許可] で、 [openid と offline_access アクセス許可に対して管理者の同意を付与します] チェック ボックスをオフにします。

こちらを満たす必要がありそう。
アプリケーション(クライアントID)を記録しておきます。

API アクセスの許可を設定する

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/microsoft-graph-get-started?tabs=app-reg-ga#grant-api-access

API のアクセス許可でアクセス許可の追加を選択する。

こいつをクリックして

こちらを選択する

  • [User](ユーザー)>[User.ReadWrite.All] : ユーザー移行またはユーザー管理のシナリオの場合。
  • [Group](グループ)>[Group.ReadWrite.All] : グループの作成、グループ メンバーシップの読み取りと更新、グループの削除を行う場合。
  • [AuditLog]>[AuditLog.Read.All] :ディレクトリの監査ログを読み取る場合。
  • [Policy](ポリシー)>[Policy.ReadWrite.TrustFramework] :継続的インテグレーション/継続的デリバリー (CI/CD) のシナリオの場合。 たとえば、Azure Pipelines を使用したカスタム ポリシーの展開などです。

というように書いてあります。
今回の操作で権限がどこまで必要なのかわからないので、まずはUser.ReadWrite.AllとPolicy.ReadWrite.TrustFrameworkを付与することにします。

管理者の同意を与える。

状態が変わりました。

シークレット作成

https://learn.microsoft.com/ja-jp/azure/active-directory-b2c/microsoft-graph-get-started?tabs=app-reg-ga#create-client-secret

追加されました。

アクセストークンを要求してみる

ADB2Cですが、やっていることは一緒なはず。
ということで、以下の手順のトークン要求をやっていきます。

https://learn.microsoft.com/ja-jp/graph/auth-v2-service?tabs=http#4-get-an-access-token

ここで取得したaccess_tokenをheaderに詰めて
https://graph.microsoft.com/v1.0/users
にアクセスします。

すると、自分のテナントのユーザ情報がみれるようになりました。

CLI と REST API を使用してクライアント アプリケーションを登録する

これができれば、やりたいことにかなり近づいてるはず。

https://learn.microsoft.com/ja-jp/azure/healthcare-apis/register-application-cli-rest

以下かなり重要な部分で、ずっと探していたazコマンドでアプリケーションの種類がazコマンドで指定できないという部分。

 --reply-urlsを 使用して、Web アプリ用の 1 つ以上の返信 (またはリダイレクト) URL を追加できます。 ただし、 パラメーターを使用してアプリケーションまたはプラットフォームの種類を指定することはできません。シングル ページ アプリ、モバイル、デスクトップ アプリケーションの場合は、代わりに REST API を使用し、アプリケーションまたはプラットフォームの種類を指定します。

https://learn.microsoft.com/ja-jp/azure/healthcare-apis/register-application-cli-rest#add-redirect-urls

これもGraphを使う理由の一つです。
az restをがっつり読み解く必要がありそうだ。

続きの項目としては、こちら?

https://learn.microsoft.com/ja-jp/azure/healthcare-apis/configure-azure-rbac-using-scripts

続きはまた別の記事にしたいと思います。
とりあえず、Graph APIが使えるアプリケーションを登録するという部分までは完了とします