こんにちは、サイオステクノロジー技術部 武井です。
※本記事の英語版はこちら(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の設定画面で「プラットフォーム機能」→「承認/認証」の順にクリックします。
「App Service認証」を「オン」にして、認証プロバイダーの「Azure Active Directory」をクリックします。
ここでは、Azureを管理しているAzure Active Directoryと、Office365を管理しているAzure Active Directoryが別とします。そういうケースが多いと思います。ということで、「詳細」をクリックします。「クライアントID」「クライントシークレット」には、Azure Active Directoryに登録したアプリケーションのクライントID、クライントシークレットを入力します。「発行者のURL」には、「https://sts.windows.net/[テナントID]」を入力して、「OK」をクリックします。
次にアクセストークンを取得するコードを書きましょう。あ、その前にVisual StudioのNuGetパッケージマネージャーで以下のライブラリを取得してください。Visual Studio 2017ですと、「ツール」→「NuGetパッケージマネージャー」→「ソリューションのNuGetパッケージの管理」で以下の画面が表示されますので、検索窓に「Microsoft.Azure.Webjobs.Extensions.AuthTokens」と入力して、検索してください。 表示されたものをインストールしてください。
そして、今度は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のアクセストークンが表示されます。アクセストークン生成やリフレッシュトークンの呪縛から解き放たれました。
ラクチンですね。癖になりそうです。