Amazon AlexaでAuth0でアカウントリンクする
Alexaアカウントリンク
アカウントリンクとは
アカウントリンクを使うことで、Amazon IDを他のアカウントとリンクさせる仕組み。
たとえば、ウェブベースでユーザーがタクシーを手配できる「タクシー予約」サービスがあるとします。それを元にして「アレクサ、タクシー予約でタクシーを頼んで」とユーザーがリクエストするカスタムスキルを作成できます。 このリクエストを完了するには、スキルがタクシー予約のユーザーとしてタクシー予約サービスにアクセスし、プロファイル情報と支払い情報を取得する必要があります。つまり、Alexa搭載デバイスで使うAmazonアカウントと、ユーザーのタクシー予約アカウントとのリンクが必要ということです。
認証方式
OAuth2.0
Alexa Skills Kitでは、AlexaユーザーのAmazonアカウントとサービスの既存アカウントのリンク作成に、OAuth 2.0認証フレームワークを使用します。
認証フロー
- Resource Owner: Alexa Skillの利用者
- Resource Server: 利用者のデータを持つサーバ(例:タクシー予約サービス)
- Client: Alexa Skill
- Authorization Server: OAuth2.0対応の認可サーバ(主にAuthorization code grantを使用)
アカウントリンクを開始すると認証画面のURI(Authorization URL)に移動。
認可サーバにアクセスするためのエントリーポイント。
アクセストークンのURI(Access Token URI)
認証画面のURI(Authorization URL)で認可コードを取得したら、アクセストークンのURI(Access Token URI)でアクセストークンと交換する。
Auth0との連携
具体的な例がInteraction-Based Authentication for Alexa Skills with Auth0にあるので参考に設定していく。
Auth0設定
- ApplicationはApplication TypeをMachine to Machine Applicationsとして作成
- Token Endpoint Authentication MethodをBasicにする
- JsonWebTokenSignatureAlgorithmをHS256にする
- Allowed Callback URLsはAlexa指定のURLを設定 (ACCOUNT LINKING -> Alexa Redirect URLs)
- Grant TypeとしてAuthorization Codeを有効化
Alexa Skill設定
Alexaの開発コンソールのACCOUNT LINKING (Build -> ACCOUNT LINKING)で以下を設定。
- **Do you allow users to create an account or link to an existing account with you?**を有効化
- **Allow users to enable skill without account linking (Recommended).**を有効化
- Select an authorization grant typeでAuth Code Grantを選択
- Your Web Authorization URI: auth0のOAuth Authorization URL(Settings -> Advanced Settings -> Endpoints)
- Access Token URI: auth0のOAuth Token URL(Settings -> Advanced Settings -> Endpoints)
- Your Client ID: auth0のClient ID(Settings)
- Your Secret: auth0のClient Secret(Settings -> Client Secret)
- Your Authentication Scheme: HTTP Basic (Recommended)
- Scope: openid, offline_access, profile, email
- Domain List: cdn.auth0.com