Azure Functions を 使うときに認証をかけたい場合があるだろう。今回は、つぎの3つのテーマを達成するために少しづつやってみよう。

- Azure Functions と、Azure Active Directory B2c を連携させてユーザ認証する
- Facebook と連携してアカウントを作れるようにする
- 多要素認証を有効にする
- RBAC
まずは今回は最初の一つ目からやってみたい。
1. Azure Active Directory B2C を作成する
Azure Active Directory B2C はクラウドのID マネジメントシステムで、一般ユーザ向けに認証認可の管理や、多くの、SNSとの連携 (Facebook, Google 等) 多要素認証など、コンシューマ向けのID管理で必要なことは一通りできる様子。さて、これをServerless の基盤と合わせて設定するとどれぐらいでできるだろうか?
1.1. Azure Active Directory B2C とテナントと作成する
最初に、Azure Active Directory B2C を作成する。普通にポータルから作れる。するとつぎのような選択が出て来るので、Create a new Azure AD B2C Tenant を選ぶ。これを選ぶと、テナントが作られる。

なぜかJapan がないので、US にしておくが、つぎのような画面が出て来るので、情報を入れて、Create を押すと、テナントと、Azure Active Directory B2C が出来上がる。

ところが、これだけだと、サブスクリプションが紐づいてないので、何もできない。紐付けよう

1.2. B2C とサブスクリプションを紐付ける
これで、サブスクリプションとの紐付けができた。リソースグループに、B2C ができているので、それをクリックして、こちらをクリック

2. アプリケーションを作成する
認証をかけてリソースを守る対象を「アプリケーション」として登録する。
2.1. Azure Function を作成する
適当に Http Trigger の Function を作成してみよう。

URL が取得できる。
2.2. アプリケーションを登録する
この 保護する対象のアプリケーションを B2C に登録しよう。

Add
ボタンをクリックしてアプリを登録
アプリを登録するときのポイントは一つだけで、Reply URL に保護対象のFunction App のURL + .auth/login/aad/callback
というURLにする。これは、AD側で認証してもらった後に、Azure Functions 側に戻って来るときのURLだ。ここで、ADからのトークンを受け取って、ユーザを登録したり認証したりする。

アプリができると、IDが振られる

ただ、これだけだと、まだ何もできない。
3. Sign up or Sign in Policy を設定する
まずは追加ボタン

今回は、一般ユーザをe-mail/passowrd で認証するので、Local 認証というのを選ぶ

Select sign-up attributes はサインアップするときに必要な項目を定義する。もちろんe-mail (password はカウントしない)だけでやりたいので、e-mail
のみ選択。

Select Application Claim は、認証後にアプリにどういう情報を渡すか?という設定。いろんな値が渡せる。基本的にリクエストヘッダーから取得できる様子。

最終的に、この画面になるので、Create を押すとポリシーができる。

3. Azure Function の設定
Authentication / Authorization をクリック

設定画面が出て来るので、App Service Authentication
を On
にして、Action to take when request is not authenticated をLog in with Active Directory
に設定し、Azure Active Directory をクリック

設定に行く前に、先ほど設定したSign up or Sign in Policy を開いてみるとつぎのような画面になっている。赤で囲んだところをコピーしておく。よくみると、Application で設定した値が設定されているのがわかるだろう。

そして、先ほどの、AD の設定画面に戻る。
Client ID に Application を作成したら取得できた Application ID をセットする。Issuer Url には、先ほど Sign up or Sign in Policy で取得したURLを貼っておく。これは、AD B2C とテナントの発行者のURL。

これで設定OK!しっかりセーブしておこう

- 動作確認
Sign up or Sign in Policyをサイド開けてみよう。よくみると、Run now というボタンがある。実はこれで設定を試せる。押してみよう。

できてるっぽい

せっかくなので、さっき作ってみた Azure Functions をテストしてみる。テスト実行してみると、しっかり、401 の認証エラーになる。さて、最後のテスト

Azure Functions のURLを入れてブラウザを叩く。Sign up/in 画面きたー!アカウントないから、サインアップする。

ちゃんと、e-mail が本当にあるか確認してくれる。そしてセーブ。

認証されて動いた!!!

そして、AD B2C の方には新しいユーザが登録されている。

終わりに
次回は、Facebook 認証と多要素認証について書いてみたい!これは楽チンだわ。