既存のアカウントシステムと統合する

既存のアカウントシステムと統合する

このセクションでは、Login with Amazonユーザーアカウントのユーザープロファイルデータと、アカウント管理システムを既に備えているTVやそのほかのデバイスを統合する方法について説明します。ユーザーがAmazonアカウントを使用してサイトやアプリにログインできるようにする方法と、既存のユーザーがAmazon IDを設定してAmazonの認証情報でログインするための方法を紹介します。

前提条件

このガイドは、開発者が既にLogin with Amazonに登録しており、Login with AmazonアプリとしてTVやそのほかのデバイスの登録を済ませ、Login with Amazonサービスと通信するためのSDKやサーバー側のメソッドが用意されている状態を想定しています。

また、TVやそのほかのデバイスに次の機能があることも前提条件としています。

  1. 各ユーザーアカウントの情報を記録するアカウントデータベース。
    • ユーザーには何らかの一意の識別子がある。
    • ユーザーは現在ユーザー名/パスワードを使用してサインインしている。
  2. 登録ユーザー用のサインインページ。
  3. プロファイル情報(名前、Eメールなど)を取得して新たなユーザーを登録するための登録ページ。
  4. ユーザーがサインインした後のページで認証状態をサインイン中として管理できるメカニズム(たとえば、Cookieやバックエンドデータベースでの情報の保存)。

データベースを変更する

Amazonアカウント識別子とローカルアカウントの間のマッピングを記録できるようにアカウントデータベースを変更する必要があります。これは、アカウントテーブル(Amazonアカウント識別子とローカルアカウントの識別子の間をマッピングするテーブル)内の新しいフィールドの形を取ることができます。

Amazonアカウント識別子は、user_IDプロパティとして、amzn1.accountVALUEの形式で返されます。例:amzn1.account.K2LI23KL2LK2

Login with Amazonをセットアップする

TVやそのほかのデバイスに関連するSDKやサーバー側のメソッドを使用し、ユーザーが自身のAmazon認証情報を使用してログインするための手段を用意します。この作業には、サインインページや登録ページのUIの変更が含まれます。サインインページには、Amazon認証情報でログインするユーザーのために [Login with Amazon] ボタンを用意しておく必要があります。詳細については、TVやそのほかのデバイスの概要ページを参照してください。

Amazonユーザープロファイルデータを取得してセキュリティを確保する

ユーザーがサインインする(また、初回の利用時にデータの共有を許可する)ためにLogin with Amazonサービスと情報をやり取りすると、Login with Amazonから開発者に認可レスポンスが送信されます。認可レスポンスを受け取ったら、以下を実行する必要があります。

  1. HTTPSを使用して、認可レスポンスのアクセストークンをサーバーに送信します。
  2. サーバー側から、アクセストークンを使用して、profileエンドポイントを呼び出します。各種言語のコードサンプルを含め、profileエンドポイントの呼び出しの詳細については、ユーザープロファイル情報を取得するを参照してください。Login with Amazonからは、user_idemailnamepostal_codeなどの値を含むユーザープロファイルレスポンスが返されるので、それをサーバーに保存できます。この手順を踏むことで、サーバーに保存したプロファイルデータを、クライアントにサインインしているユーザーに確実に対応付けることができます。
  3. ユーザーが過去にサインインしたことがあるかどうかを確認するには、ユーザーデータベース内でそのユーザーのAmazonアカウント識別子を検索します。サインインしたことがないユーザーに対しては、新しいアカウントを作成する必要があります。
  4. アカウントシステム内にそのユーザーのEメールアドレスがあるかどうかを検索します。検索したEメールアドレスに関連付けられたローカルアカウントが見つかった場合は、Login with Amazonでのログインのためにローカル認証情報の入力をユーザーに促します。
  5. ユーザーのブラウザにCookieを作成するか、サイトまたはアプリでユーザーを認証済みとして記録します。

ローカルアカウントを検索/作成する

ユーザープロファイルのレスポンスには、常にuser_idという名前のパラメーターが含まれます。このパラメーターの値は、ユーザーがサインインしているAmazonアカウントを永続的かつ一意に特定する文字列となります。Amazonは必ず、ユーザーごとに決まった識別子を返します。

このAmazonアカウントが過去にサイトやアプリにサインインしたことがあるかどうかを確認するには、ユーザーデータベースを検索します。そのAmazonアカウントが過去にサインインしたことがなく、かつ既存のアカウントと一致しない場合は、ローカルアカウントデータベースに新しいエントリを作成して、次回のサインイン時のためにそのエントリをAmazonアカウント識別子と関連付ける必要があります。Amazonアカウントが既存のローカルアカウントと一致する場合は、2つのアカウントを結び付けるために、ローカルパスワードの入力をユーザーに求めます。

認証レスポンスにはそれ以外のユーザーデータ(ユーザーの名前、Eメールアドレスなど)が含まれることがあります。新しいアカウントを作成するとき、または既存のアカウントをアップデートするとき(ユーザーが前回のサインイン以降にAmazonに登録しているEメールアドレスを変更している場合など)に、この情報をローカルアカウントデータベースにコピーできます。

アカウントを作成する前にユーザーから追加の情報を収集する必要がある場合は、ここで登録ページを表示します。その場合、認証レスポンスで取得済みの情報は自動的に入力されるように設定できるほか、必要な追加フィールドのみ表示することもできます。

ユーザーを認証済みとしてマークする

有効な認証レスポンスを受け取って、自身のアカウントデータベース内に対応するアカウントが見つかった/作成されたら、そのユーザーを認証済みとしてマークします。この手順は、現在使用している認証システムとまったく同じしくみであると考えられます。