Understanding the refresh token
You can use the refresh token to retrieve new ID and access tokens. By default, the refresh token expires 30 days after your application user signs into your user pool. When you create an application for your user pool, you can set the application's refresh token expiration to any value between 60 minutes and 10 years.
The Mobile SDK for iOS, Mobile SDK for Android, Amplify for iOS, Android, and Flutter automatically refresh your ID and access tokens if a valid (unexpired) refresh token is present. The ID and access tokens have a minimum remaining validity of 2 minutes. If the refresh token is expired, your app user must re-authenticate by signing in again to your user pool. If the minimum for the access token and ID token is set to 5 minutes, and you are using the SDK, the refresh token will be continually used to retrieve new access and ID tokens. You will see expected behavior with a minimum of 7 minutes instead of 5 minutes.
Your user's account itself doesn't expire, as long as the user has logged in at least once
before the UnusedAccountValidityDays
time limit for new accounts.
Getting new access and identity tokens with a refresh token
Use the API or hosted UI to initiate authentication for refresh tokens.
To use the refresh token to get new ID and access tokens with the user pools API, use
the AdminInitiateAuth or
InitiateAuth API operations.
Pass REFRESH_TOKEN_AUTH
for the AuthFlow
parameter. In the
AuthParameters
property of AuthFlow
, pass your user's refresh
token as the value of "REFRESH_TOKEN"
. Amazon Cognito returns new ID and access tokens
after your API request passes all challenges.
Note
To use the Amazon Cognito user pools API to refresh tokens for a hosted UI user, generate an
InitiateAuth
request with the REFRESH_TOKEN_AUTH
flow. This
method of token handling in your application doesn't affect users' hosted UI sessions. The
API response issues new ID and access tokens, but doesn't renew the hosted UI session
cookie.
You can also submit refresh tokens to the Token endpoint in a user pool where you have configured a domain. In the
request body, include a grant_type
value of refresh_token
and a
refresh_token
value of your user's refresh token.
Revoking refresh tokens
You can revoke refresh tokens that belong to a user. For more information about revoking tokens, see Ending user sessions with token revocation.
Note
Revoking the refresh token will revoke all ID and access tokens that Amazon Cognito issued from refresh requests with that token.
Users can sign out from all devices where they are currently signed in when you revoke
all of the user's tokens using the GlobalSignOut
and
AdminUserGlobalSignOut
API operations. After the user is signed out, the
following effects happen.
-
The user's refresh token can't get new tokens for the user.
-
The user's access token can't make token-authorized API requests.
-
The user must re-authenticate to get new tokens. Because hosted UI session cookies don't expire automatically, your user can re-authenticate with a session cookie, with no additional prompt for credentials. After you sign out your hosted UI users, redirect them to the Logout endpoint, where Amazon Cognito will clear their session cookie.
With refresh tokens, you can persist users' sessions in your app for a long time. Over
time, your users might want to deauthorize some devices where they have signed in,
continually refreshing their session. To sign your user out from a single device, revoke
their refresh token. When your user wants to sign themself out from all authenticated
sessions, generate a GlobalSignOut API request . Your app can present your user with a choice like
Sign out from all devices. GlobalSignOut
accepts a
user's valid–unaltered, unexpired, not-revoked–access token. Because this API
is token-authorized, one user can't use it to initiate sign-out for another user.
You can, however, generate an AdminUserGlobalSignOut API request that you authorize with your AWS credentials
to sign out any user from all of their devices. The administrator application must call this
API operation with AWS developer credentials and pass the user pool ID and the user's
username as parameters. The AdminUserGlobalSignOut
API can sign out any user in
the user pool.
For more information about requests that you can authorize with either AWS credentials or a user's access token, see Amazon Cognito user pools authenticated and unauthenticated API operations.