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 日