更新トークンの理解
更新トークンを使用して、新しい ID およびアクセストークンを取得できます。更新トークンはデフォルトで、アプリケーションユーザーがユーザープールにサインインしてから 30 日後に有効期限が切れます。ユーザープールのアプリケーションを作成するときは、アプリケーションの更新トークンの有効期限を 60 分から 10 年までの任意の値に設定できます。
Mobile SDK for iOS、Mobile SDK for Android、Amplify for iOS、Amplify for Android、および Amplify for Flutter は、有効な (期限が切れていない) 更新トークンが存在する場合に ID トークンとアクセストークンを自動的に更新します。ID トークンとアクセストークンには、2 分間の最小残存有効期間があります。更新トークンが有効期限切れになっている場合、アプリケーションユーザーはユーザープールに再度サインインすることで再認証される必要があります。アクセストークンと ID トークンの最小値が 5 分に設定されていて、SDK を使用している場合、更新トークンは、新しいアクセストークンと ID トークンを取得するために継続的に使用されます。期待される動作は、最小値を 5 分ではなく 7 分以上を設定することで確認できます。
ユーザーのアカウント自体は、ユーザーが新しいアカウントの UnusedAccountValidityDays
時間制限前に少なくとも 1 回ログインしている限り、その有効期限が切れることはありません。
更新トークンによる新しいアクセストークンと ID トークンの取得
更新トークンの認証を開始するには、API または ホストされた UI を使用します。
更新トークンを使用して、ユーザープール API で新しい ID トークンやアクセストークンを取得するには、AdminInitiateAuth または InitiateAuth API オペレーションを使用します。AuthFlow
パラメータの REFRESH_TOKEN_AUTH
を渡します。AuthFlow
の AuthParameters
プロパティで、ユーザーの更新トークンを "REFRESH_TOKEN"
の値として渡します。Amazon Cognito は、API リクエストがすべてのチャレンジを通過した後、新しい ID とアクセストークンを返します。
注記
Amazon Cognito ユーザープール API を使用してホストされた UI ユーザーのトークンを更新するには、REFRESH_TOKEN_AUTH
フローを使用して InitiateAuth
リクエストを生成します。この方法でアプリケーションでトークンを処理しても、ユーザーのホストされた UI セッションには影響しません。API レスポンスは新しい ID トークンとアクセストークンを発行しますが、ホストされた UI セッション Cookie は更新されません。
更新トークンは、ドメインを設定したユーザープール内の トークンエンドポイント に送信することもできます。リクエスト本文には、refresh_token
の grant_type
値とユーザーの更新トークンの refresh_token
値を含めます。
更新トークンの取り消し
ユーザーに属する更新トークンを取り消すことができます。トークンの取り消しの詳細については、「トークン取り消しによるユーザーセッションの終了」を参照してください。
注記
更新トークンを取り消すと、Amazon Cognito がそのトークンを使用して更新リクエストから発行したすべての ID トークンとアクセストークンが取り消されます。
ユーザーのすべてのトークンを GlobalSignOut
および AdminUserGlobalSignOut
API オペレーションを使用して取り消すことで、そのユーザーは、現在サインインしているすべてのデバイスからサインアウトできるようになります。ユーザーがサインアウトすると、以下の結果になります。
-
ユーザーの新しいトークンの取得にユーザーの更新トークンを使用できない。
-
ユーザーのアクセストークンは、トークン認証された API リクエストを行うことができない。
-
新しいトークンを取得するためにユーザーが再認証される必要がある。ホストされた UI セッション cookie は自動的に期限切れにならないため、ユーザーは認証情報の入力を求められることなく、セッション cookie を使用して再認証できます。ホストされた UI ユーザーをサインアウトしたら、ユーザーをログアウトエンドポイントにリダイレクトします。ここで Amazon Cognito はユーザーのセッション cookie を消去します。
更新トークンを使用すると、ユーザーのセッションをアプリケーション内で長期間維持できます。時間が経つに従って、ユーザーはサインインしている一部のデバイスの認証を解除して、セッションを継続的に更新することを希望する場合があります。1 つのデバイスからユーザーをサインアウトするには、ユーザーの更新トークンを取り消します。ユーザーがすべての認証済みセッションからログアウトしたい場合は、GlobalSignOut API リクエストを生成します。アプリケーションは、[すべてのデバイスからサインアウト] などのオプションをユーザーに提供できます。GlobalSignOut
は、ユーザーの有効な (変更されていない、有効期限が切れていない、取り消されていない) アクセストークンを受け入れます。この API はトークン認証されているため、あるユーザーがそれを使用して別のユーザーのサインアウトを開始することはできません。
ただし、AWS 認証情報で認可した AdminUserGlobalSignOut API リクエストを生成すると、すべてのデバイスから任意のユーザーをサインアウトできます。管理者アプリケーションは、AWS デベロッパー認証情報を使用してこの API オペレーションを呼び出し、パラメータとしてユーザープール ID とユーザーのユーザー名を渡す必要があります。AdminUserGlobalSignOut
API は、ユーザープール内の任意のユーザーをサインアウトできます。
AWS 認証情報またはユーザーのアクセストークンのいずれかを使用して認可できるリクエストの詳細については、「Amazon Cognito ユーザープールの認証済みおよび未認証の API オペレーション」を参照してください。