[Alexa] Microsoft Graph にアカウントリンクしてみました 〜AlexaでOffice 365を操作するために〜
1 はじめに
Microsoft Graphは、Office 365などのMicrosoft Cloud サービスリソースへのアクセスを可能にするRESTful Web API です。従来、outlook.comなど複数に分かれていたエンドポイントを統合したものです。
Microsoft Graphは、アクセストークンを使用してURLで機能にアクセスし、応答はJSONで返るという「モダン」な作りになっています。
そして、ここで必要となるアクセストークンは、OAuth2で取得可能になっています。
Amazon Alexa(以下、Alexa)のスキルには、アカウントリンクという機能があり、OAuth2でアクセストークンを取得して、他のサービスの機能を利用することができます。
今回は、このAccunt LinkingでMicrosoft Graphに繋いでみました。
2 アプリの作成
Microsoft Graphでアカウントリンクするためには、アプリを作成する必要があります。
アプリの作成要領は、以下のとおりです。
- アプリの追加
- シークレットの作成
- リダイレクトURLの設定
- アクセス許可の追加
- 設定の保存
(1) アプリの追加
- https://apps.dev.microsoft.com/にログインし、アプリの追加を選択します。
- Application Nameを設定し(ここでは、AccountLinkingWidthMSGraphとしました。)Createを押します。
- 生成されたアプリケーションIDは、Amazon開発者コンソールでの設定に必要なのでコピーしておきます。
(2) シークレットの作成
- アプリケーション シークレットで、新しいパスワードを生成 を選択ます。
- ここで生成されたパスワードは、2度と表示できません。Amazon開発者コンソールでの設定に必要なので、こちらもコピーしておきます。
- シークレットが一覧されている事が確認できます。
(3) リダイレクトURLの設定
- プラットフォームからプラットフォームの追加を選択します。
- 種類は、Webを選択します。
- リダイレクトURLを設定します。
リダイレクトURLは、Amazon開発者コンソールからコピーできます。
※ちょっと、ここが不明なのですが、Alexaが日本語に対応してから、リダイレクトURLにalexa.amazon.co.jpが増えたのですが、Microsoft Graphの方では、異なるドメインを受け付けないようです。 対応方法が分かりましたら、この部分更新したいと考えております。
(4) アクセス許可の追加
- Microsoft Graphのアクセス許可からoffline_access を追加します。なお、注意が必要なのは、offline_access は、期限が切れた際のTokenのリフレッシュの為に必須です。
(5) 設定の保存
- 保存を押して設定を保存すればアプリの作成は完了です。
3 アカウントリンクの設定
Amazon開発者コンソールでのアカウントリンクの設定は以下のとおりです。
- 認証URL「https://login.microsoftonline.com/common/oauth2/v2.0/authorize」
- クライアント ID アプリの「アプリケーションID」です。
- スコープ 「user.read offline_access」
- 認証タイプ 「Auth Code Grant」
- アクセストークンURL 「https://login.microsoftonline.com/common/oauth2/v2.0/token」
- クライアントシークレット アプリで生成した「アプリケーションシークレット」です。
- クライアント認証スキーム 「リクエストボディの資格情報」
4 ユーザーによる承認
ユーザーによる承認は、以下のようになります。
- Arexaアプリで当該スキルを開きます。
- SETTINGを選択します。
- Link Accountを選択して、認証開始します。
- Microsoftのログインページに移動しますので、リンクするアカウントでログインします。
- 表示されているアクセス権に問題が無ければ、承諾を押します。
- Alexaでアクセストークンの取得が成功すれば、successfully linkdと画面に表示されます。
- Account Linkingのところは、Linkedに変化しています。
5 Tokenの取得と動作確認
アカウントリンクが成功すると、トークンは、Alexa側に取得されており、スキルのリクエスト時に一緒に送られてきます。これは、サービスシミュレーターで、スキルを実行して確認することができます。
Alexaから送られてきたアクセストークンを使用して、Microsoft Graphのエンドポイントにアクセスしてみましたが、問題なくアクセス出来ている事が確認できました。
$ curl -X GET -H "Authorization:Bearer {ここにアクセストークンを入れる}" https://graph.microsoft.com/v1.0/me/ { "@odata.context":"https://graph.microsoft.com/v1.0/$metadata#users/$entity", "id":"4fe8xxxx-xxxx-xxxx-xxxx-xxxx5aed0","businessPhones":[], "displayName":"alexa-user1","givenName":"user1","jobTitle":null, "mail":"user1@alexa-dev.tokyo","mobilePhone":null,"officeLocation":null, "preferredLanguage":"ja-JP","surname":"alexa", "userPrincipalName":"user1@alexa-dev.tokyo" }
6 最後に
アカウントリンクを使用するとAlexaからOffice365の機能へのアクセスが可能になります。 Outlookの新着メールをAlexaで聞いたり、予定表に繋いで今日の予定をAlexaで聞くなんてのも、ちょっと面白いのでは無いでしょうか
7 参考リンク
Microsoft Graph
Alexaユーザーとシステムユーザーを関連付ける
Microsoft Graph (Unified API) を使いこなそう
Office 365 API リファレンス
Amazon AlexaのAccount Linkingを使ってAmazon EchoからTwitterに書き込ませてみる
[Alexa] Account Linking を使用してスキルからFacebookに投稿してみました
[Alexa] Login with Amazon との Account Linking で名前を呼びかける挨拶とかメールを送信するスキルを作ってみました
[Alexa] LINEログインでAccount Linkingしてみた