業務で拾ったネタをまたひとつ。
Azure Active Directory ログインを使用するよう App Service アプリを構成するで解説されているとおり、Azure App ServiceはAzure Active Directory(AAD)を利用した認証機構が簡単に実現できます(Easy Authと言うらしい)。サーバー側でWebページを生成するタイプのWebアプリケーションでもシングルページアプリケーション(SPA)でも、なんなら静的なHTMLでも分け隔てなく手軽に利用できるのが便利なところ。また、これはさすがに静的なHTMLでは無理ですが、Microsoft Graphとの連携も可能になります。
SPAの場合連携のための情報はAzure App Serviceが既定で用意するパス /.auth/me へのアクセスで取得できます。アクセスすると返されるJSONにはユーザーIDや表示名、AAD内部で利用するID(オブジェクトID)などAAD認証の基本情報が含まれますが、その中にGraph APIアクセスを可能とするアクセストークンも含まれるのです。Graph APIを呼びだす際、 /.auth/me アクセスで取得したアクセストークン(access_tokenプロパティの値)をHTTP要求ヘッダーに次のかたちで指定すればOK。
Authorization: Bearer ${accessToken}
Graph API側のアクセス権設定などは別途必要ですが、それはまた別の話。
……とこれだけで済めばきわめてお手軽なのですが、ひとつだけ注意しなければならない点があります。 /.auth/me は一度参照すると原則更新されないらしく、認証が無効になってからあらためて認証してアクセスしてもアクセストークンが古いままだったりするのです。うーむ、なぜそうなるのか……
アクセストークンはパス /.auth/refresh へアクセスすると更新されます。
避けなければならない理由がなければ、 /.auth/me アクセス前にかならず /.auth/refresh をアクセスするようにしておけばよいでしょう。
なおサインアウトは /.auth/logout へのアクセスで可能です。