Como gerar token de acesso

Para obter um token de acesso(Access Token) é necessário utilizar as suas credenciais obtidas no Portal do Seller. Para isso, você deverá codificar as credenciais de acesso para uma string Base64 no formato:

ClientId:ClientSecret

toBase64(ClientId:ClientSecret) // result is: Q2xpZW50SWQ6Q2xpZW50U2VjcmV0
Montar uma requisição POST para o endereço: 

https://login.rchlo.io/auth/realms/rchlo-pub/protocol/openid-connect/token

Headers:

Authorization: Basic Q2xpZW50SWQ6Q2xpZW50U2VjcmV0
Content-Type: application/x-www-form-urlencoded

Body:

Data-UrlEncode como: grant_type=client_credentials
Data-UrlEncode como: scope=mktp-seller-account

Exemplo:

curl --location --request POST 'https://login.rchlo.io/auth/realms/rchlo-pub/protocol/openid-connect/token' \ 
--header 'Authorization: Basic Q2xpZW50SWQ6Q2xpZW50U2VjcmV0' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=mktp-seller-account'

A resposta da chamada acima, resulta em um payload como no exemplo abaixo:

{ 
"access_token": "{token_de_acesso}", // token de acesso JWT usado para efetuar as requisições em nossas apis
"expires_in": 360, // tempo de expiração do token de acesso(access token)
"refresh_expires_in": 1800, // tempo de expiração do token de atualização(refresh token)
"refresh_token": "{token_de_atualizacao}", // token de atualização
"token_type": "bearer",
"not-before-policy": 1616102267,
"session_state": "00000000-0000-0000-0000-000000000000", // estado da seção
"scope": "email rchlo mktp-seller-account profile" // escopos da seção
}

Renovando o token de acesso

O seu token de acesso possui um tempo de expiração, conforme pode ser visto no payload acima. Com isso, quando este tempo estiver se aproximando, ao invés de você gerar um novo token de acesso, é uma boa prática utilizar chamadas de atualização do token de acesso. Para isso, devemos utilizar o token de atualização(Refresh Token).

Com o uso do refresh token é possível obter um novo token de acesso mantendo a seção anterior viva em nossos servidores, e consequentemente não onerando tanto os sistemas usados para a geração do token de acesso.

Para se fazer o uso do refresh token e gerar um novo access token, basta:

- Efetuar um POST para:

- https://login.rchlo.io/auth/realms/rchlo-pub/protocol/openid-connect/token

Headers:

Authorization: Basic Q2xpZW50SWQ6Q2xpZW50U2VjcmV0
Content-Type: application/x-www-form-urlencoded

Body:

Data-UrlEncode: grant_type=refresh_token
Data-UrlEncode: client_id={ClientId}
Data-UrlEncode: refresh_token {valor_do_refresh_token_gerado_anteriormente}

Exemplo:

curl --location --request POST 'https://login.rchlo.io/auth/realms/rchlo-pub/protocol/openid-connect/token' \ 
--header 'Authorization: Basic Q2xpZW50SWQ6Q2xpZW50U2VjcmV0' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'client_id={ClientId}' \
--data-urlencode 'refresh_token={valor_do_refresh_token_gerado_anteriormente}'

A resposta desta chamada resulta em um payload com schema idêntico ao anterior, onde o valor de session_state se mantém o mesmo, porém um novo token de acesso será retornado. Este novo token de acesso deverá ser utilizado nas chamadas subsequentes em nossas APIs.

{ 
"access_token": "{token_de_acesso}", // token de acesso JWT usado para efetuar as requisições em nossas apis
"expires_in": 360, // tempo de expiração do token de acesso
"refresh_expires_in": 1800, // tempo de expiração do refresh token/token de atualização
"refresh_token": "{token_de_atualizacao}", // token de atualização
"token_type": "bearer",
"not-before-policy": 1616102267,
"session_state": "00000000-0000-0000-0000-000000000000", // estado da seção
"scope": "email rchlo mktp-seller-account profile" // escopos da seção
}