Easy Auth を設定した Azure Functions を Power Automate から呼び出す
はじめに
Azure Functions はセキュリティを高めるために標準で API キーを渡して実行することができますが、より高いセキュリティを求める場合に、Azure AD による認証 (Easy Auth) をかけることがあると思います。また、Azure Functions の HTTP トリガーの関数を UI (ブラウザーの遷移) で呼び出すことはほとんどなく、JavaScript のリクエストや Power Automate の HTTP アクションなどの UI が存在しないところから呼び出すことになります。その場合、OAuth で Azure AD の認証および承認を通す必要がありますが、毎度ながら OAuth の仕組みは難しいので、順を追ってやり方を見てみたいと思います。
実行手順
Azure Functions の設定
Easy Auth を有効にするために、呼び出し先の Azure Functions で プラットフォーム機能 - ネットワーク - 承認/認証 をクリックします。
App Service 認証 をオンにし、認証プロバイダー として Azure Active Directory を選択します。アプリの作成が要求されるので、簡易モードでアプリを作成します。
Azure AD のアプリの登録
Easy Auth を有効にするために作成したアプリとは別に新しいアプリを作成します。新しいアプリで API のアクセス許可 で検索すると、Easy Auth を有効にしたときのアプリが出てくるので、user_impersonation をチェックし、アクセス許可を追加します。
リフレッシュ トークンの取得
Power Automate を使って、作成した新しいアプリに対してのアクセス トークンおよびリフレッシュ トークンを取得します。手順については以下の記事にまとまっているのでこちらを参考にしてください。
ここでは、ブラウザー経由で認証コードを取得し、アクセス トークンを OneDrive for Business (先の記事では OneDrive になっていますが OneDrive for Business に読み替えてください) に保存するフローを実行したとします。
Azure Functions の呼び出し
OneDrive for Business に保存されたリフレッシュ トークンからアクセス トークンを取得し、アクセス トークンを Authorization
ヘッダーに追加して Azure Functions の HTTP トリガーを呼び出します。
実行してみると、HTTP トリガーが正常に呼び出され結果が返ってくるのがわかります。
おわりに
今回の手順は App Service で自作の Web API を Azure AD で保護する手順と同じになります。アプリが 2 種類出てくるので混乱しがちですが アクセス許可を定義する アプリと アクセス許可を付与する アプリがあることを理解するとよいのではないかと思います。
Discussion