Azure FunctionsでToken Bindingを使って、Azure Active DirectoryによるOAuth認証をラクチンにする

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

こんにちは、サイオステクノロジー技術部 武井です。

※本記事の英語版はこちら(Click here to read in English)

Office365の各種機能をRestfulなAPIで操作したい場合は、Graph API一択になると思います。ただ、Graph APIは、Azure Active DirectoryによるOAuth認証が必要になります。ただ、OAuthの認証って実はかなりめんどくさいです。最初にアクセストークンを作るときには認可エンドポイントにアクセスして、認可コードを取得して、その認可コードをトークンエンドポイントに渡して、初めてアクセストークンが取得できますが、その後も、リフレッシュトークンを利用して、定期的にアクセストークンを再生成しないといけません。

実は、Azure Functionsの場合、このあたりの一連の処理を「Token Binding」を使うことによって非常に簡単に実現できます。「Token Binding」は「HTTP Trigger Binding」や「Queue Trigger Binding」の親戚みたいなものです。

では早速、実演してみたいと思います。やり方は色々あるのですが、Visual StudioでC#で書いてから、Azure Portalに発行するという方法でやってみたいと思います。

Azure Active Directoryにアプリケーションの登録は済んでいるものします。Azure Functionsの設定画面で「プラットフォーム機能」→「承認/認証」の順にクリックします。

Screen Shot 2019-02-07 at 22.04.46

 

「App Service認証」を「オン」にして、認証プロバイダーの「Azure Active Directory」をクリックします。

Screen Shot 2019-02-07 at 22.09.29

 

ここでは、Azureを管理しているAzure Active Directoryと、Office365を管理しているAzure Active Directoryが別とします。そういうケースが多いと思います。ということで、「詳細」をクリックします。「クライアントID」「クライントシークレット」には、Azure Active Directoryに登録したアプリケーションのクライントID、クライントシークレットを入力します。「発行者のURL」には、「https://sts.windows.net/[テナントID]」を入力して、「OK」をクリックします。

Screen Shot 2019-02-07 at 22.12.52

次にアクセストークンを取得するコードを書きましょう。あ、その前にVisual StudioのNuGetパッケージマネージャーで以下のライブラリを取得してください。Visual Studio 2017ですと、「ツール」→「NuGetパッケージマネージャー」→「ソリューションのNuGetパッケージの管理」で以下の画面が表示されますので、検索窓に「Microsoft.Azure.Webjobs.Extensions.AuthTokens」と入力して、検索してください。 表示されたものをインストールしてください。

Screen Shot 2019-02-07 at 19.28.27

 

そして、今度はAzure Functions側に記載するソースコードになります。まんまHTTP Triggerのサンプルですが(´・ω・`)

ポイントは[Token]…以降の属性の部分です。これがToken Bindingになります。こちらも方法は色々ありますが、graphTokenにOAuthのアクセストークンを入れる場合は以下のように記載してください。

[Token(IdentityProvider = AAD, Resource = https://graph.microsoft.com/, Identity = TokenIdentityMode.ClientCredentials)]string graphToken

こちらのコードをAzureに発行して、実行すると、Access Token:の後にOAuthのアクセストークンが表示されます。アクセストークン生成やリフレッシュトークンの呪縛から解き放たれました。

ラクチンですね。癖になりそうです。

アバター画像
About 武井 宜行 269 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる