Azure Active Directory B2Cを使いこなそう 番外編「ContainerAppsの認証にB2Cを使う」

# 連載「Azure Active Directory B2Cを使いこなそう」

1. [Azure Active Directory B2Cの特徴と使いどころ](https://qiita.com/yyukawa/items/78a52275b9dc9c37cd9e)
1. [基本的な使い方（標準ユーザーフロー）を知る](https://qiita.com/yyukawa/items/5996fd6558a9f5fa8631) 
1. [基本的な概念（テナント、アプリケーション、ユーザー）を理解する](https://qiita.com/yyukawa/items/da96b4666ace678db167)
1. [ユーザーフローの日本語化](https://qiita.com/yyukawa/items/f5a6960f5e457b5cc262)
1. [パスワードレス認証](https://qiita.com/yyukawa/items/7c96f9599630420f37c3) ★
1. 条件付きアクセスを使って環境に応じた認証を要求する
1. 柔軟な認証フローを実現する：カスタムポリシー
1. [ContainerAppsの認証にB2Cを使う](https://qiita.com/yyukawa/items/49327a629b282a0bdb5b)

# ContainerAppsの認証

ContainerAppsでは簡単な設定でOpenID Connectに対応しているサービスをアプリケーションの認証に利用することができます。
AzureADを使う場合については公式にも手順の記載がありますが、B2Cは記載されていないので試してみます。

# ContainerAppsを立ち上げる

以下の設定で立ち上げます。特に注意すべきものはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/f6728e8f-2895-f3f1-d6a3-5a1ef17c1bef.png)

リソースが立ち上がったらアプリケーション URLをメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/47c022d2-0c86-0978-a582-8258b90efd6f.png)

URLをブラウザで開くと以下の画面が表示されます。
この画面を開く前に認証が求められるように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/ab85a1dd-24c1-52a3-69c6-b50a9bdc406e.png)


# B2Cにアプリケーションを登録する

B2Cのテナントでアプリケーションを登録します。
管理のアプリの登録を選び、新規登録を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/1cfe8d0c-c59e-2f1b-b06c-48269fc37047.png)

リダイレクトURIですが、`<app-url>/.auth/login/<provider-name>/callback`という形式になります。B2Cの場合はカスタムのProviderになるので、自分であとでつけることになる名前になります。ここではprovider-nameの部分をaadb2cとします。app-urlは先ほどメモしたアプリケーション URLを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/f7ebbd99-dea9-a755-d1ce-dba30c30374e.png)

アプリケーション（クライアントID）をメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/ae09de3b-55ca-13d8-1928-40161b02609e.png)

クライアントシークレットを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/75aed0ff-9be6-acf7-5abf-8a8476553a2f.png)

登録したシークレットの値をメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/62b9dffc-91f7-d2f0-cb39-cdaf7a397c17.png)

左ナビの認証を選択し、ID トークンを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/a07ff774-29dd-a0e5-5c2c-7429741bdf6c.png)

# ユーザフローのメタデータエントリを確認する

認証で利用するユーザーフローを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/63b32e28-911d-e4d9-2072-f965ceec0e06.png)

「ユーザーフローを実行します」を選択すると右側上部に表示されるURLをメモします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/e3d71fd8-2c83-7c04-38ec-08856026a6b9.png)

# ContainerAppsでB2Cを利用するように設定する

左ナビの認証を選択し、ID プロバイダーを追加を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/941317ce-3fae-f0cc-ce20-740357030426.png)

OpenID プロバイダー名に「aadb2c」を、「ユーザーフローを実行します」を選択すると右側上部に表示されるURLをメタデータURLに、アプリケーション（クライアントID）をクライアントIDに、シークレットの値をクライアントシークレットに指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/70f18d33-f01f-f0ff-062a-9f07a1a86768.png)

# 認証が有効になっていることを確認する

アプリケーション URLを開くと認証画面が表示されます。
最初の１回目はエラーになるかもしれませんが、気にせずリロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/13cf62dc-3de7-c48e-0bd8-9fd19342a33f.png)

以下の画面が開ければ成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/39d25640-7c7e-e671-0a87-8be182a47814.png)

# うまくいかない場合

クライアントIDが間違っている場合は認証画面を表示できず、エラーメッセージが出ます。

シークレットが間違っている場合は認証画面は表示されるのですが、ContainerAppsに戻ってきたところでエラーになります。この場合はエラーメッセージは画面に出てくれません。
以下のログを確認するとシークレットが間違っているというエラーメッセージが出ているはずです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/16609/446dbb78-dbec-3af9-bb99-14f493e640e4.png)

気にする人いないかもしれませんが、上記で出てくるシークレットやクライアントIDはすべて無効化済です。