Amazon Cognito ユーザープール API で発生する "Invalid Refresh Token" エラーをトラブルシューティングしたいと考えています。
解決策
リフレッシュトークンとは異なるアプリクライアント ID を使用した場合
ユーザーが AdminInitiateAuth API、InitiateAuth API、またはホスト UI で認証する際、アプリクライアント ID は ClientId パラメータとして機能します。リフレッシュトークンを発行した ID とは異なるアプリクライアント ID を使用した場合、API から "Invalid Refresh Token" エラーが返されます。
このエラーを解決するには、AdminInitiateAuth または InitiateAuth API の呼び出し時に、元のリフレッシュトークンを発行した ID と同じアプリクライアント ID を使用してください。
デバイスの追跡が有効で、未承認デバイスが存在する場合
ユーザープールでデバイスの追跡を有効にしたものの、デバイスが未承認の場合は、新たにトークンの取得を試みると "Invalid Refresh Token" エラーが発生します。
このエラーを解決するには、ConfirmDevice API を呼び出してデバイスを確認してから、デバイスの追跡を開始します。次に、リフレッシュトークンを使用して新しいアクセストークンと ID トークンを取得します。詳細については、「記憶するデバイスを設定する」を参照してください。
認証パラメータにデバイスキーが欠けている場合
ユーザープールでデバイスの追跡を有効にすると、認証が正常に行われた際、Amazon Cognito は一意のデバイスキーを返します。リフレッシュトークンを使用して新しいトークンを取得するには、次の認証リクエストにデバイスキーを含めてください。
{ "AuthFlow": "REFRESH_TOKEN_AUTH",
"AuthParameters": {
"REFRESH_TOKEN": "example_refresh_token",
"SECRET_HASH": "example_secret_hash",
"DEVICE_KEY": "example_device_key"
}
}
注: example_refresh_token、example_secret_hash、example_device_key をそれぞれ実際の値に置き換えてください。
アプリクライアントがクライアントシークレットを使用する場合は、AuthParameters に SECRET_HASH パラメータを含めてください。この方法では、リクエストがアプリケーションから送信されたことを確認できます。
デバイスキーが AuthParameters の一部として渡されない場合、 "Invalid Refresh Token" エラーが発生します。このエラーを解決するには、AdminInitiateAuth または InitiateAuth API でデバイスキーを AuthParameters として含める必要があります。
デバイストラッキングは有効ですが、USER_PASSWORD_AUTH 認証フローを使用してください
ユーザープールでデバイストラッキングが有効になっている状態で USER_PASSWORD_AUTH 認証フローを使用すると、アクセストークン、ID トークン、更新トークンを受け取ります。ただし、更新トークンを使用して新しいトークンを取得しようとすると、"Invalid Refresh Token" というエラーが表示されます。USER_PASSWORD_AUTH フローは、デバイスの追跡が有効な場合のトークンの更新をサポートしていません。
このエラーを解決するには、USER_SRP_AUTH 認証フローを使用してからトークンを更新します。
関連情報
更新トークン
Amazon Cognito ユーザープールによる認証
アプリクライアントにおけるアプリケーション固有の設定
Amazon Cognito のユーザープールでデバイスを追跡、記憶する