アカウントリンクでよく起きる問題とトラブルシューティングについて

Chihiro Tatara Feb 12, 2021
Share:
Training & Tutorials Alexa Skills Kit
Blog_Header_Post_Img

本ブログはTroubleshooting Common Account Linking Issues with Alexa Skillsを翻訳したものです。

アカウントリンクは、ユーザーのAmazon IDを、ユーザーが持つ他のシステムのアカウントに接続するしくみです。詳しい情報やユーザーの体験についてはAlexaスキルにおけるユーザーのアカウントリンク体験についてをご覧ください。

このブログでは、アカウントリンクの実装でよく起きる問題とそのトラブルシューティング方法をまとめております。「〇〇のアカウントリンクを完了できませんでした」のエラー、一定期間後にアカウントリンクが無効になる、特定のデバイスでのみアカウントリンクに失敗するなどの事例をご紹介します。

〇〇のアカウントリンクを完了できませんでした

Authorization code grantフローのアカウントリンクで最もよく発生する問題は、認可サーバーのアクセストークンURIからアクセストークンと更新トークンのペアを取得する際に起きます。ユーザーがAlexaアプリからアカウントリンクを開始すると、Alexaはアカウントリンク設定時に登録する認証画面のURIを使用してログインページを表示します。ユーザーが認証されると、認可サーバーが認可コードを生成します。Alexaサービスはこのコードを使用して認可サーバーのアクセストークンURIにPOSTのリクエストを送信し、アクセストークンと更新トークンのペアを取得します。Alexaサービスがアクセストークンと更新トークンのペアを取得できない場合、以下のエラーが表示されます。

トラブルシューティングの方法:

認可サーバーのログを確認

  • ユーザーの認証後、認証サーバーはアクセストークンと更新トークンのペアの交換に有効な認可コードを生成していることを確認
  • 認証サーバーのレスポンスをログに出力し、アクセストークンと更新トークンのペアを返している。また、JSONのフォーマットが正しいことを確認

サードパーティの認証サーバー(Google Sign-InFacebook Loginなど)を使用し、サーバーのログにアクセスできない場合はAWS APIゲートウェイでログにアクセスすることを推奨します。Amazon APIゲートウェイをプロキシとしてAlexaサービスに送信されるJSONを確認する方法はこちら(英語)をご覧ください。

AcceptGrant応答を確認

スマートホームスキルの場合、ChangeReportや非同期の応答を送信するためにスキルが「Alexaイベントを送る」を有効にしている可能性があります。

「Alexaイベントを送る」を有効にしている場合、アカウントリンク時にスキルへ送信されるAcceptGrantディレクティブをサポートする必要があります。スキルは同期的応答でAcceptGrant.Responseイベントを使用して応答し、Login with Amazonを呼び出して認可コードをアクセストークンや更新トークンと交換します。このアクセストークンは非同期の応答を送信する際に使用します。

AcceptGrantディレクティブを正しく処理していない場合はアカウントリンクが失敗します。開発者コンソールから「Alexaイベントを送る」を無効にするとアカウントリンクが成功する場合、AcceptGrantディレクティブが原因となりますので、AcceptGrant.Responseイベントで正しく応答していることをご確認ください。

アカウントリンクに成功するが、一定期間後に再度アカウントリンクが必要

Alexaが提供された更新トークンで新しいアクセストークンと更新トークンのペアを取得できなかった可能性があります。アクセストークンの有効期限は6分以上、またはexpires_inパラメータで360以上に設定する必要があります。また、開発者コンソールから設定できるデフォルトのアクセストークンの有効期限が360秒以上であることを確認してください。

アクセストークンレスポンスの例:

Copied to clipboard
HTTP/1.1 200 OK
Content-Type: application/json;charset UTF-8
Cache-Control: no-store
Pragma: no-cache
{
   "access_token":"Atza|EXAMPLEACCESSTOKEN123456...",
   "token_type":"bearer",
   "expires_in":360,
   "refresh_token":"Atzr|EXAMPLEREFRESHTOKEN123456X..."
}

認証サーバーが更新トークンで新たなアクセストークンと更新トークンのペアを発行できることを確認してください。また、更新トークンは有効期限がない設定にするか、有効期限が切れた場合でも一定数の古い更新トークンを有効なままにしておくことをお勧めします。更新トークンの有効期限が切れてAlexaサービスは新しいトークンペアを取得できない場合は、ユーザーがAlexaアプリから再度アカウントリンクする必要があります。

特定のデバイスでのみアカウントリンクに失敗する

一つのデバイスでアカウントリンクが成功しても、他のデバイスでアカウントリンクに失敗することがあります。例えば、ブラウザではアカウントリンクが成功し、モバイルのAlexaアプリでは失敗します。これは、アカウントリンクの設定で特定のドメインがドメインリストに登録されていないことが原因の可能性があります。

アカウントリンクの過程で接続する外部のドメインが全て追加されていることを確認してください。例えば、oauth.sample.comに接続する場合は、sample.comだけではなくoauth.sample.comを追加する必要があります。

リダイレクトでHTTP 400のエラーが発生する

これは通常、redirect_uriに問題があるかリダイレクトURLが無効であることが原因です。例外として、リクエストのサイズ(リダイレクトのURL、全てのドメインのクッキーを含む)が大きすぎる場合にも発生します。

シークレットウィンドウやプライベートウィンドウでアカウントリンクをテストしてみてください。それらでアカウントリンクが成功する場合はリクエストのサイズが原因となります。リダイレクトURLは全てのクエリパラメーターを含むため長くなることがありますが、このリダイレクトURLのサイズを減らす必要があります。特に認証コードが長くなりがちなので、認証コードを短くすることをお勧めします。

このブログではアカウントリンクの実装でよく起きる問題についてご紹介しました。アカウントリンクの問題はこちらのフォーラム(英語)にも掲載されておりますので参考になさってください。

関連ドキュメント

Subscribe