OAuth 2.0: Refresh token grant flow
The Refresh Token grant type is used by clients to exchange a refresh token for an access token when the access token has expired. You can get refresh tokens only for the OAuth 2.0: Authorization code flow.
New OAuth2 access tokens have expirations. Tokens return an expires_in
field indicating how long the token will last.
A refresh token is a special kind of token that contains the information required to obtain a new access token or ID token. Usually, you will need a new access token only after the previous one expires.
Client requests a new token
The refresh token grant allows your app to ask apaleo to issue a new access_token
directly,
without re-authenticating the user. This will work as long as the refresh token has not been
revoked.
Refresh tokens are subject to strict storage requirements to ensure that they are not leaked.
To refresh your token, using the refresh_token
you already got during authorization, make a POST
request to the https://identity.apaleo.com/connect/token
endpoint in the authentication API, using
grant_type=refresh_token
.
POST https://identity.apaleo.com/connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&client_id=SDXE-AC-MYAPP&client_secret=ZiEWFgFeSP......5yhTgsZgx&refresh_token=_A4CpoIDT.......qYEpxEW8g
Request | Value |
---|---|
Method | POST |
URL | Uses the OAuth endpoint https://identity.apaleo.com/connect/token . |
Header | Value |
---|---|
Authorization |
Basic authorization, using the client id and client secret of the OAuth client. |
Content-Type |
application/x-www-form-urlencoded |
Example cURL request
You can test the creation of token by running the following cURL command.
On Windows, use Windows Subsystem for Linux (WSL) to run the cURL command.
curl -X POST \
https://identity.apaleo.com/connect/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data client_id=SDXE-AC-MYAPP \
--data client_secret=ZiEWFgFeSP......5yhTgsZgx \
--data grant_type=refresh_token \
--data refresh_token=E042F......5EC95
Key | Description |
---|---|
client_id | The ID assigned to your app when it was registered. |
client_secret | Your client application’s secret. |
grant_type | The value refresh_token . |
refresh_token | The refresh_token that you already got when you exchanged authorization code for token in the OAuth 2.0: Authorization code flow. |
Authorization server grants a new token
After verifying the request, the identity server sends a response with a new access token to the connected app.
The response will include a new access_token
, its type, its lifetime (in seconds), and the
id_token
.
{
"id_token": "eyJ...b9w",
"access_token": "eyJ...Vsg",
"expires_in": 3600,
"token_type": "Bearer",
"refresh_token": "E042F......5EC95",
"scope": "openid profile availability.read rates.read reservations.read identity:account-users.read offline_access"
}
You should only ask for a new token if the access_token
has expired, or you want to refresh the
claims contained in the id_token
. Calling the endpoint to get a new access_token
every time you
call an API works, but we wouldn’t call it the best practice.
During implementation or debugging, you might want to check the contents of those token, for example, to read the account code. Here’s one handy tool jwt.io. They write “[…] We do not record tokens, all validation and debugging is done on the client side”, and it should be okay to use them, but - better safe than sorry. We recommend to be cautious, and not post the production tokens of real customers there.