Implicit grantを設定する


Implicit grantを設定する

Alexa Skills Kitは、カスタムスキルのアカウントリンクにImplicit grantをサポートします。このGrant種別は、スマートホームスキルなど、カスタムスキル以外のスキルには使用できません。

Implicit grantフローの概要

Alexaは、OAuth 2.0のアカウントリンクフローとImplicit grantを使用して、ユーザーのAmazonアカウントをシステムのアカウントにリンクします。このフローは、従来のアカウントリンクとアプリ間アカウントリンク(Alexaアプリから開始する場合)のどちらでも同じです。従来のアカウントリンクでは、Alexaは設定されたURIを使用してウェブサイトのログインページを開きます。アプリ間アカウントリンクでは、Alexaは設定されたURIを使用してアプリのログインページを開きます。アプリがデバイスにインストールされていない場合、フォールバックとしてWebサイトのURIが使用されます。

ユーザーは、スキルを有効にするとき、またはAlexaアプリのアカウントリンクカードからアカウントリンクプロセスを開始できます。ユーザーのアカウントリンク操作の詳細については、カスタムスキルのアカウントリンクを参照してください。

ユーザーアカウントをリンクするImplicit grantフローの手順は以下のとおりです。

  1. ユーザーがAlexaアプリでスキルを有効にするか、またはアカウントリンクカードのリンクをタップすると、プロセスが開始されます。

  2. Alexaアプリが、アカウントリンクを設定する際に指定した認証画面のURIを使用して、アプリ内にログインページを表示します。このログインページでは認可サーバーを使ってユーザーの認証を行います。

    Alexaアプリが指定した認証画面のURIを呼び出すと、このURIにはクエリー文字列のパラメーターとしてstateclient_idresponse_typescoperedirect_uriが含まれます。

  3. ユーザーは認可サーバーの認証情報を使ってログインします。
  4. ユーザーが認証されると、認可サーバーがユーザーを一意に識別するアクセストークン(access_token)を生成します。
  5. 認可サーバーが指定されたredirect_uriにユーザーをリダイレクトし、その際、URLフラグメントでstateaccess_tokentoken_typeを渡します。
  6. AlexaサービスがAlexaユーザーのaccess_tokenを保存します。

ユーザーのAlexaアカウントはサービスのアカウントにリンクされ、スキルが使用できるようになりました。

以下の図は、ユーザーがAlexaアプリからアカウントをリンクした場合のアカウントリンクフローを示しています。Alexaは、上記の手順に沿って認可サーバーからアクセストークンを取得します。

Implicit grantフロー

スキルでアクセストークンを使用する

アカウントのリンク後、ユーザーがスキルに送信するすべてのリクエスト(IntentRequestなど)にはaccess_tokenが含まれるようになります。スキルはこのトークンを使ってリソースサーバーから必要な情報を取得します。

以下の図は、ユーザーがスキルにリクエストを送信し、スキルがアクセストークンを使ってリソースサーバーから情報を取得するフローを表しています。

スキルとの対話の流れ

認証画面のURI

認証画面のURLはAlexa開発者コンソールのビルド>アカウントリンクページで設定し、認証画面のURIフィールドにURLを入力します。Alexaサービスは、URLのクエリ文字列を使用して認可サーバーにパラメーターを渡します。たとえば認証画面のURIがhttps://www.ridehailer.com/loginの場合、Alexaは次のパラメーターを送信します。

https://www.ridehailer.com/login?state=abc&client_id=unique-id&scope=order_car+basic_profile&response_type=token&redirect_uri=https%3A//pitangui.amazon.com/api/skill/link/M2AAAAAAAAAAAA

Alexaサービスは、認証画面のURIを開く際のクエリ文字列に以下のパラメーターを含めます。

パラメーター 説明

client_id

スキルのIDです。この値を使って、アカウントリンクを設定した複数のスキルを識別するなど、スキル固有の機能を提供できます。client_idは、スキルのアカウントリンクを設定する際に定義します。

redirect_uri

サービスが認証したユーザーをリダイレクトする、Amazon固有のリダイレクト先のエンドポイント(リダイレクト先のURL)です。このパラメーターの値の候補は、開発者コンソールでスキルのアカウントリンクを設定する際にも表示されます。

response_type

認可サーバーによってユーザーが認証された場合に返す応答の種類です。Implicit grantの場合、response_typeは常にtokenです。

scope

Alexaユーザーが必要とするアクセスを表すスコープのリスト(任意)です。これらのスコープは、スキルのアカウントリンクを設定する際に定義します。

  • トークンサーバーはアクセストークンを生成するときにこの情報を使用できます。たとえば、リソースサーバーの基本的なプロフィール情報にはアクセスできるが、支払い情報にはアクセスできないトークンを作成できます。
  • スコープは複数使用できます。リストは、URLエンコードされたスペースで区切ります。
  • ログインページでは、アカウントをリンクすることで許可されるアクセスの種類をユーザーに伝える必要があります。たとえば、「アカウントをリンクすると、タクシー予約スキルがあなたに代わってタクシーの配車を依頼し、あなたのアカウントに料金を請求できるようになります。」などのテキストをログインページに表示します。 スマートホームスキルの場合、「アカウントをリンクすると、マイライトスキルがあなたのマイライトハブに接続された照明を制御できるようになります。」などと表示します。

state

アカウントリンクを使用してユーザーをトラッキングするために、Alexaサービスが内部的に使用する値です。

Alexaサービスは、認証画面のURIを介して認可サーバーにstate値を送信します。認可サーバーは、その特定のアカウントリンクリクエストのリダイレクトURIを呼び出すときに、同じstate値を使用する必要があります。認可サーバーへの各リクエストには、独自のstate値があります。

Alexaのリダイレクト先URL

Alexaアプリが使用するリダイレクト先のエンドポイントは、開発者コンソールのビルド>アカウントリンクページのAlexaのリダイレクト先のURLフィールドに表示されます。これらのエンドポイントは、ユーザーの認証後、ログインページからユーザーをリダイレクトする必要があるURLです。リストには、Alexaリージョンごとに1つ、複数のURLが表示されます。

Alexaアプリは、ユーザーがデバイスを登録した場所に基づいてリダイレクト先のURLを選択し、URLクエリ文字列のredirect_uriクエリパラメーターに認証画面のURIを指定して渡します。認証後、認可サーバーはredirect_uriを使用してユーザーをAlexaアプリに戻す必要があります。

たとえば、redirect_uriパラメーターがhttps://pitangui.amazon.com/spa/skill/account-linking-status.html?vendorId=M2AAAAAAAAAAAAの場合、ユーザーはログインページから以下のURLにリダイレクトされます。その後、認可サーバーはクエリ文字列にこのstateパラメーターとaccess_tokenパラメーターを指定して渡します。

https://pitangui.amazon.com/spa/skill/account-linking-status.html?vendorId=M2AAAAAAAAAAAA#state=xyz&access_token=2YotnFZFEjr1zCsicMWpAA&token_type=Bearer
リダイレクト先のエンドポイントを認可サーバーに登録する

通常、リダイレクト先のエンドポイントは、特に認可サーバーを所有していない場合でも認証画面のURIから呼び出すことができるよう、認可サーバーに登録します。スキルが複数のリージョンで機能するよう、ユーザーのリダイレクト先のURLに表示されるすべてのURIを登録してください。

登録方法は使用する認可サーバーによって異なります。たとえばLogin with Amazonでは、セキュリティプロファイルを設定してAllowed Return URLsフィールドに利用可能なリダイレクト先URLを指定する必要があります。

サーバーの要件については、OAuthプロバイダーのドキュメントを参照してください。

アクセストークン

Alexa開発者コンソールで認可サーバーのアクセストークンエンドポイントを設定するには、ビルド>アカウントリンクページのアクセストークンのURIフィールドに適切なURLを入力します。

ユーザーがアカウントをリンクすると、Alexaサービスはクライアント認証情報を含むPOSTリクエストをトークンURIに送信します。その後、認可サーバーは、ユーザーを一意に識別するアクセストークンを生成して返す必要があります。このトークンはリソースサーバーに固有で、セキュリティを考慮して作成されている必要があります。具体的には、ユーザーを識別する一方で、推測不可能である必要があります。

アクセストークンの要件については、アクセストークンURIの要件を参照してください。

次のコードは、Alexaからのアクセストークンリクエストの例です。

POST /auth/o2/token HTTP/1.1
Host: api.amazon.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8

grant_type=implicit
&client_id=exampleId
&redirect_uri=https%3A//pitangui.amazon.com/api/skill/link/M3PCA6K3O9X0NW

アクセストークンの生成に成功すると、認可サーバーは次のような応答を送信します。

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":3600
}

前提条件

Alexaスキルにおけるアカウントリンクの要件に記載されている要件を満たす認可サーバーがあることを確認します。

Implicit grantの設定手順

  1. Alexa開発者ポータルでImplicit grant用にスキルを設定します。詳細については、Alexa開発者ポータルでアカウントリンクを設定する手順を参照してください。
  2. アクセストークンを検証して使用するための処理をスキルコードに追加します。
  3. アカウントリンクフローをテストします。

ステップ1: アカウントリンクの設定

アカウントリンクは、Alexa開発者コンソールのビルド>アカウントリンクページで有効にすることができます。また、ASK CLIまたはアカウントリンクREST APIで設定することもできます。

アカウントリンク設定

設定で、スキルで使用できるアカウントリンクオプションを有効または無効にします。次のセクションのセキュリティプロバイダーオプションは、ここで有効にした設定に応じて表示されます。

以下の表は、アカウントリンクの設定に必要なフィールドの一覧です。

フィールド 説明

ユーザーがアカウントや既存アカウントへのリンクを作成することを許可しますか?

カスタムスキルでアカウントリンクを有効にする場合、このオプションをオンにします。 スマートホームスキルとビデオスキルでは自動で選択されます。

アカウントリンクなしでスキルを有効にすることをユーザーに許可します(推奨)

ユーザーがアカウントをリンクせずにスキルを有効にできるようにする場合、このオプションをオンにします。カスタムスキルでのみ選択できます。アカウントを必要とする機能だけでなくアカウントを必要としない機能も提供するスキルで役に立つオプションです。詳細については、ユーザーがアカウントをリンクせずにスキルを有効にするを参照してください。

このオプションはデフォルトではオンです。

ユーザーがユーザーアプリケーションやウェブサイトからアカウントをリンクできるようにします

ユーザーがウェブサイトを使用して認証できるようにする場合、このオプションをオンにします。

モバイルアプリでのユーザー認証を可能にします

アプリ間アカウントリンクを有効にして、ユーザーがモバイルアプリを使用して認証できるようにする場合、このオプションをオンにします。

ユーザーが音声を使用して自分のアカウントをスキルにリンクすることを許可する

ユーザーが音声でAmazonアカウントをサービスのアカウントとリンクできるようにする場合、このオプションをオンにします。

セキュリティプロバイダー情報

セキュリティプロバイダー情報で、Authorization grant種別を選択し、以下に記載するセキュリティプロバイダー情報を設定します。ここに表示されるオプションは、設定セクションで有効にしたオプションによって変わります。サードパーティOAuthプロバイダーを使用する場合、そのプロバイダーのドキュメントを確認してフィールドに入力する値を判断してください。

フィールド 説明

Authorization Grant種別を選択

アクセストークン取得に使用するOAuth 2.0のAuthorization Grant種別です。Implicit Grantを選択します。

Web認証画面のURI

ユーザーがサービスにサインインできるよう、ウェブサイトに認証画面を開くためのURI。ユーザーがアカウントリンクプロセスを開始すると、Alexaアプリはこのページを表示します。詳細については、認証画面のURIを参照してください。

サードパーティのOAuthプロバイダーを使用している場合は、認可リクエスト用に提供されているURIを確認してください。たとえばLogin with Amazon(LWA)の場合、認証画面のURIはhttps://www.amazon.com/ap/oaです。

iOSアプリの認証URI

ユーザーがサービスにログインするための認証ページをiOSモバイルアプリで開くためのユニバーサルリンク。ユーザーがiOSモバイルアプリからアカウントリンクプロセスを開始すると、Alexaアプリはこのリンクを開きます。詳細については、認証画面のURIを参照してください。
モバイルアプリからの認証を有効にする場合に必要です。

Androidアプリの認証URI

ユーザーがサービスにログインするための認証ページをAndroidモバイルアプリで開くためのアプリリンク。ユーザーがAndroidモバイルアプリからアカウントリンクプロセスを開始すると、Alexaアプリはこのリンクを開きます。詳細については、認証画面のURIを参照してください。
モバイルアプリからの認証を有効にする場合に必要です。

ユーザーのクライアントID

認証をリクエストするユーザーを識別する一意の文字列です。この値は、client_idパラメーターとして認証画面のURIに渡されます。

サードパーティOAuthプロバイダーを使用している場合、プロバイダーが想定しているクライアントIDを確認してください。たとえばLogin with Amazonの場合、このIDはLogin with Amazonのセキュリティプロファイルを作成するときに作成されます。

Scope

他のサービスの権限のリスト(任意)です。リソースサーバーが異なるアクセススコープをサポートする場合、それらのスコープを指定します。最大15個まで指定できます。

ここに指定したすべてのスコープが、Alexaアプリが認証画面のURIを呼び出す際のscopeパラメーターに(URLエンコードされたスペースで区切って)代入されます。

サードパーティのOAuthプロバイダーを使用している場合、プロバイダーがサポートするスコープのセットから指定してください。たとえばLogin with Amazonの場合、profileprofile:user_idpostal_codeがサポートされます。

ドメインリスト

認証画面のURIがデータを取得するドメインのリスト(任意)です。ログインページが他のドメインからコンテンツを取得する場合は、そのドメインをこのリストに指定します。

このフィールドは、認証画面のURI以外のドメインを使用する場合にのみ必要です。たとえば、認証画面のURIがhttps://www.ridehailer.com/loginだとします。ページがwww.ridehailer.com以外のドメインから画像などのコンテンツを取得する場合、そのドメインをドメインリストに追加します。最大30個まで指定できます。

Alexaのリダイレクト先のURL

サービスでユーザーを認証した後にログインページからユーザーをリダイレクトする、Amazon提供のリダイレクト先エンドポイント。Alexaは、ログインページへのリクエストで使用する値を、認証画面のURIのredirect_uriパラメーターとして渡します。このフィールドには、リージョン固有のリダイレクトURLが表示されます。詳細については、Alexaのリダイレクト先のURLを参照してください。

ステップ2: スキルコードでのアクセストークンの使用

Implicit grantを設定したら、アクセストークンを検証して使用する処理をスキルコードに追加します。スキルはこのアクセストークンを使ってリソースサーバーからユーザー情報を取得できます。詳細については、次のページを参照してください。

ステップ3: アカウントリンクフローのテスト

アカウントリンクの設定を完了すると、アカウントリンクフローをテストできます。Alexaアプリでスキルを有効にし、アカウントリンクプロセスを開始します。サービスにログインしてAlexaアプリに戻ることを確認します。

アカウントリンクの実装を終了するには、受信するリクエストにアクセストークンがあるかどうかを確認して適切なアクションを実行するよう、スキルコードを更新します。また、ユーザーがアカウントリンクを有効にしなかった場合やキャンセルした場合に、応答でアカウントリンクカードを送信するコードも追加します。Alexaアプリに表示された場合、このカードには認証画面のURIへのリンクが表示されます。ユーザーはこのカードから直接アカウントリンクプロセスを開始できます。

詳細については、次のトピックを参照してください。

カスタムスキル: カスタムスキルコードでアクセストークンを検証して使用する


このページは役に立ちましたか?

最終更新日: 2025 年 05 月 30 日