Alexa.Authorizationインターフェース3
AlexaスキルにAlexa.Authorizationインターフェースを実装すると、スキルはAlexaイベントゲートウェイにアクセスできます。ゲートウェイにアクセスできると、Alexaに、Alexa.ChangeReportなどの非同期応答やプロアクティブイベントを送信できます。
メッセージプロパティの定義については、Alexaインターフェースのメッセージとプロパティを参照してください。
イベントゲートウェイの認可
Alexa.Authorization.AcceptGrantディレクティブの目的は、ユーザーを識別してAlexaへの認証を行うための認証情報を提供することです。
Alexaは、ユーザーがスマートホームスキルを有効にしてアカウントリンクプロセスを完了した後、または開発者がプロアクティブイベントをサポートするよう既存のスマートホームスキルを更新したときに、AcceptGrantディレクティブを送信します。
AcceptGrantディレクティブには、次の情報が含まれます。
-
Alexaから認可コードが送信されます。Login with Amazon(LWA)を使用して、この認可コードをアクセストークンや更新トークンと交換します。詳細については、Get access token with authorization code操作およびLWA Authorization Code Grantを参照してください。
-
Alexaから、アカウントリンクプロセスの間にAlexaに渡されたユーザーのアクセストークンが送信されます。このトークンを保存して、システムでユーザーを識別するために使用します。
HTTP 403 Forbidden応答が返されるか、トークンを更新しようとしたときにLWAからエラーが返されます。AcceptGrantディレクティブをスキルで受信しない場合は、開発者コンソールで、Alexaイベントを送信する権限をリクエストしたことを確認してください。アクセス権限ページのAlexaイベントを送るセクションのスライダーを使用して、スキルがAlexaイベントゲートウェイにメッセージを送信することを指定します。ディレクティブ
Alexa.Authorizationインターフェースは次のディレクティブを定義します。
AcceptGrantディレクティブ
Alexaでユーザーを識別するための認証情報を取得して保存できるようにするには、AcceptGrantディレクティブをサポートします。
AcceptGrantディレクティブの例
以下は、Alexaがスキルに送信するAcceptGrantディレクティブの例です。このインターフェースは同期的応答のため、メッセージに相関トークンは含まれません。
{
"directive": {
"header": {
"namespace": "Alexa.Authorization",
"name": "AcceptGrant",
"messageId": "一意のバージョン4 UUID",
"payloadVersion": "3"
},
"payload": {
"grant": {
"type": "OAuth2.AuthorizationCode",
"code": "someAuthCode"
},
"grantee": {
"type": "BearerToken",
"token": "someAccessToken"
}
}
}
}
AcceptGrantディレクティブのペイロード
次の表は、AcceptGrantディレクティブのペイロードの詳細を示しています。
| プロパティ | 説明 | 型 | 必須 |
|---|---|---|---|
|
|
Amazon Alexaシステムでユーザーを識別する情報です。 |
オブジェクト |
◯ |
|
|
Grantの種類です。 |
文字列 |
◯ |
|
|
ユーザーの認可コードです。 |
文字列 |
◯ |
|
|
リンクされたアカウントのサービスまたはシステムでユーザーを識別する情報です。 |
オブジェクト |
◯ |
|
|
grantee(被付与者)の種類です。 |
文字列 |
◯ |
|
|
アカウントリンクプロセスでAlexaが受け取ったユーザーアクセストークンです。 |
文字列 |
◯ |
AcceptGrant応答
AcceptGrantディレクティブを正しく処理したら、AcceptGrant.Responseを使用して応答します。このインターフェースは同期的応答のみであるため、相関トークンは含まれません。
以下は、AcceptGrant.Responseの例です。応答にペイロードは必要ありません。
{
"event": {
"header": {
"namespace": "Alexa.Authorization",
"name": "AcceptGrant.Response",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"payloadVersion": "3"
},
"payload": {}
}
}
AcceptGrantのエラー処理
次のいずれかの理由でAcceptGrantディレクティブを正しく処理できなかった場合は、Alexa.Authorization.ErrorResponseを使用して応答します。
- LWAを呼び出して認可コードをアクセストークンや更新トークンと交換することができなかった。
- ユーザーのアクセストークンや更新トークンを保存できなかった。
- アクセストークンや更新トークンを取得して保存しようとしたときに、その他のエラーが発生した。
より一般的なエラーについては、Alexa.ErrorResponseイベントで応答します。
AcceptGrantの処理中にエラーが発生した場合、ユーザーはスキルを有効にすることができません。以下は、Alexa.Authorization.ErrorResponseの例です。
{
"event": {
"header": {
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"namespace": "Alexa.Authorization",
"name": "ErrorResponse",
"payloadVersion": "3"
},
"payload": {
"type": "ACCEPT_GRANT_FAILED",
"message": "<理由>のため、AcceptGrantディレクティブを処理できませんでした"
}
}
}
関連トピック
最終更新日: 2024 年 11 月 08 日