[POST] /oauth/token
Метод /oauth/token выдает или обновляет токены. Запрос всегда отправляется как application/x-www-form-urlencoded; JSON для этого метода не используется.
Этот запрос выполняется после возврата пользователя с /oauth/authorize. Передайте одноразовый код, тот же redirect_uri, ваш client_id и code_verifier, если использовался PKCE.
curl -X POST https://auth.regos.uz/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "code=one_time_code" \
-d "redirect_uri=https%3A%2F%2Fyour.app%2Fcallback" \
-d "client_id=your_client_id" \
-d "code_verifier=your_code_verifier"
Confidential-клиент также передает client_secret. Публичный клиент не должен иметь секрет в браузере или мобильном приложении.
Успешный ответ:
{
"access_token": "eyJ...access_token",
"token_type": "Bearer",
"id_token": "eyJ...id_token",
"expires_in": 600,
"refresh_token": "opaque_refresh_token",
"scope": "openid profile email"
}
Если в ответе есть id_token, приложение должно проверить его подпись и стандартные поля, а затем может читать публичные данные пользователя из payload. Подробное описание состава id_token, включая поля gender и birthdate, вынесено на отдельную страницу id_token. Эти два поля появляются при scope profile: gender возвращается как male или female, а birthdate возвращается в формате YYYY-MM-DD.
Не предполагаете срок жизни токена заранее. Всегда используйте expires_in, который пришел в ответе.
Когда access_token истек, обновите его через refresh_token.
curl -X POST https://auth.regos.uz/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "refresh_token=opaque_refresh_token" \
-d "client_id=your_client_id"
Если клиент confidential, добавьте client_secret. После успешного ответа сохраните новые значения токенов. Старый refresh token больше не нужно использовать.
Для серверной интеграции без пользователя используйте client_credentials.
curl -X POST https://auth.regos.uz/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=your_client_id" \
-d "client_secret=your_client_secret"
Ответ содержит access_token, token_type, expires_in и scope. В этом сценарии не выдаются id_token и refresh_token.
grant_type=embed_token используется только для встроенных интеграций REGOS. Применяйте его, если REGOS отдельно выдал вам такой сценарий. Обмен выполняется на backend-стороне интеграции; подробный процесс с подключением JavaScript SDK и iframe описан на отдельной странице Embed Token.
curl -X POST https://auth.regos.uz/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=embed_token" \
-d "embed_token=one_time_embed_token" \
-d "client_id=your_client_id" \
-d "client_secret=your_client_secret"
Успешный ответ содержит delegated access_token, который действует ограниченное время и используется только в рамках согласованного сценария.