毎日、何回も Azure Portal から App Service / Azure Functions のブレードを開いているので、新しい項目があればすぐに気が付きます。なので今回の Authentication (Preview) も発見が早かったです。
何の変哲もない App Service Authentication (Easy Auth) の設定が新しくなりつつあるという話なのですが、若干の新機能もあったので試しておきます。
ちなみに基本的な考え方は OpenID Connect に対応した新しい Authentication 周りを Azure Portal からも設定できるようにした、という感じです。ファイルベースは気軽ですが IaC との相性は悪かったです。
App Service Authentication の OpenID Connect 対応については以前書いたので紹介しておきます。
ファイルベースの場合は有効化のために ARM Explorer などで設定を変える必要がありましたが、Azure Portal からの場合は当然ながらそう言った設定は不要なので気楽です。
とりあえず新しい Authentication (Preview) を使ってみました。Authentication (Preview) を有効にすると古い Authentication / Authorization の設定は使えなくなるので注意が必要です。
現在の Preview では Microsoft しか Identity Provider を選べないですが、この辺りは今後徐々に増えていくようです。ひっそりと GitHub が増えているのが古い設定との違いです。
よく見ると GitHub が Github になっていて若干 typo していました。そのうち直ると思います。
OpenID Connect がグレーアウトされた選択肢にすら入っていないのが気になりましたが、Twitter で Chris が間もなく追加されると教えてくれたので安心です。
Coming soon. 😉
— Chris Gillum (@cgillum) 2021年1月22日
API 的には OpenID Connect 対応 Provider は他と違って複数追加できるようになるはずなので、その辺りでちょっと時間がかかりそうな気配はあります。この辺りは Azure AD B2C っぽさもありますね。
既に新しい Authentication (Preview) で使われている API は当然ながら ARM Template からも使えるようになっています。リファレンスも公開されているので、読めばどんなことができるのか想像がつきます。
一先ずは現在利用可能な Microsoft を選んで設定を行っていきます。この Microsoft というのは Azure AD のことを指していますが、古い設定でいうところの MSA っぽいので若干混乱します。
この設定画面から Azure AD アプリケーションを作成できるのはこれまで通りですが、Supported account types に Microsoft account 向けの項目が追加されました。
古い Authentication に慣れていたので、この辺り分かりにくいと Twitter で話していたら Chris が背景を説明してくれたのでクリアになりました。
詳細はツイートを読んでもらえばよいですが、今回のアップデートで AAD v2 エンドポイントを使うように変わったので、MSA も Azure AD で同じように扱えるようになったらしいです。
The idea is that AAD + MSA should just be a single "Microsoft Identity Platform". It uses the AAD v2 app registration type, which supports both AAD and MSA. But yeah, if you are used the old Easy Auth UX then this logo change can be a bit confusing...
— Chris Gillum (@cgillum) 2021年1月22日
これまでは v1.0 エンドポイントが使われていたので、MSAL と組み合わせる時にいろいろと苦労がありましたが、新しい Authentication (Preview) では解消されそうです。
後の設定は未認証時の動作設定ぐらいですが、これまで 302 でログイン画面にリダイレクトさせるぐらいしかなかったのが、401 や 403 を明示的に返すオプションが増えていました。
User-Agent によってこれまで 302 リダイレクトさせるかどうかを判別していたので、Web API を App Service Authentication で認証させる場合には明示的な User-Agent の加工や、X-Request-With
をリクエストヘッダーに付ける必要がありましたが不要になります。
最後に Azure AD アプリケーションを新規作成する場合は、Graph API のパーミッションを同時に指定できるようになっていました。この辺りは通常の Azure AD アプリケーションを作成する流れと同じでした。
油断すると User.Read
のパーミッションが無くなるので気を付けたいところです。というか Azure Portal 側の不具合っぽいのでフィードバックして直してもらおうかと思います。
これで保存すれば Azure AD を使ったログインが有効になるので難しいことはないですね。基本的には UI の変更がメインではありますが、1 点だけ大きな変更点として Client Secret などのセキュアな情報は App Settings に保存されるように変わりました。
OpenID Connect を使うときと同じ仕組みに統一されたという話ですが、知っておかないと ARM Template や Terraform などで設定する時にはまりそうです。
最後になりましたが、既存の Authentication の移行には一度設定を全て削除してから、新しい Authentication の画面から再度行う必要があるので若干面倒です。設定が排他になっているので仕方ないですが、作業中は一瞬認証が外れるので注意する必要があります。