Аутентификация
Для работы с Rock Rim API необходимо пройти аутентификацию и получить токен доступа.
Методы аутентификации
API предоставляет несколько методов для получения токенов доступа в зависимости от вашего сценария использования.
Получение токена доступа
GET /api/v1/identity/auth/access-token
Получает токен доступа, необходимый для обработки других запросов. Безопасность: Требуется Публичный ключ который вы получили при регистрации аккаунта
Если вы его утеряли - запросите ключ у администратора.
Запрос
GET /api/v1/identity/auth/access-token HTTP/1.1
Host: API_HOST
x-public-project-key: YOUR_PUBLIC_PROJECT_KEY
Content-Type: application/json
Успешный ответ (200 OK)
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"ttl_seconds": 3600
}
Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
access_token | string | JWT токен для использования в последующих запросах |
ttl_seconds | integer | Время жизни токена в секундах |
Возможные ошибки
- 400 Bad Request - неверный запрос
- 500 Internal Server Error - внутренняя ошибка сервера
Инициализация сессии проекта
POST /api/v1/identity/auth/init
Инициализирует новую сессию для проекта, проверяя учетные данные проекта и возвращая временный токен доступа с информацией о проекте и магазинах.
Получает токен доступа, необходимый для обработки других запросов. Безопасность: Требуется Публичный ключ accounta
Если вы его утеряли - запросите ключ у администратора.
Запрос
POST /api/v1/identity/auth/init HTTP/1.1
Host: API_HOST
x-public-project-key: YOUR_PUBLIC_PROJECT_KEY
Content-Type: application/json
{
"user_id": "user_12345",
"device_info": {
"device_id": "A1B2C3D4-E5F6-7890",
"platform": "ios",
"os_version": "17.2.1",
"app_version": "2.1.0"
}
}
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
public_key | string | Да | Публичный ключ проекта |
user_id | string | Да | Идентификатор пользователя в вашей системе |
device_info | object | Нет | Информация об устройстве |
dlscheme | string | Нет | Deep Link схема приложения для интеграции (например, myapp://) |
DeviceInfo
| Параметр | Тип | Описание |
|---|---|---|
device_id | string | Уникальный идентификатор устройства |
platform | string | Платформа: ios, android, web |
os_version | string | Версия операционной системы |
app_version | string | Версия приложения |
Успешный ответ (200 OK)
{
"project": {
"id": "proj_abc123xyz",
"name": "My Awesome Game",
"bundle_id": "com.example.game",
"platform": "mobile",
"status": "active",
"dlscheme": "myapp://"
},
"session": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_at": "2024-01-13T11:30:00Z",
"expires_in_seconds": 3600
},
"stores": [
{
"id": "store_xyz789",
"store_type": "web",
"is_sandbox": false,
"status": "active"
}
]
}
Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
project | object | Информация о проекте |
session | object | Информация о сессии с токеном |
stores | array | Список доступных магазинов |
ProjectInfo
| Параметр | Тип | Описание |
|---|---|---|
id | string | Идентификатор проекта |
name | string | Название проекта |
bundle_id | string | Bundle ID приложения |
platform | string | Платформа проекта |
status | string | Статус проекта |
dlscheme | string | Deep Link схема приложения для интеграции |
SessionInfo
| Параметр | Тип | Описание |
|---|---|---|
token | string | JWT токен для авторизации запросов |
expires_at | string | Дата и время истечения токена (ISO 8601) |
expires_in_seconds | integer | Время до истечения в секундах |
StoreInfo
| Параметр | Тип | Описание |
|---|---|---|
id | string | Идентификатор магазина |
store_type | string | Тип магазина: iap, web, custom |
is_sandbox | boolean | Флаг тестового окружения |
status | string | Статус магазина |
Возможные ошибки
- 400 Bad Request - неверные параметры запроса
- 500 Internal Server Error - внутренняя ошибка сервера
Получение JWT сессии
POST /api/v1/identity/auth/token
Альтернативный метод для получения JWT токена сессии.
Безопасность: Требуется API ключ (x-public-project-key)
Запрос
POST /api/v1/identity/auth/token HTTP/1.1
Host: API_HOST
x-public-project-key: YOUR_PUBLIC_PROJECT_KEY
Content-Type: application/json
{
"user_id": "user_12345",
"device_info": {
"device_id": "A1B2C3D4-E5F6-7890",
"platform": "android",
"os_version": "14.0",
"app_version": "1.5.0"
}
}
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
public_key | string | Да | Публичный ключ проекта |
user_id | string | Да | Идентификатор пользователя |
device_info | object | Нет | Информация об устройстве |
dlscheme | string | Нет | Deep Link схема приложения для интеграции (например, myapp://) |
Успешный ответ (200 OK)
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_at": "2024-01-13T11:30:00Z",
"expires_in_seconds": 3600
}
Параметры ответа
| Параметр | Тип | Описание |
|---|---|---|
token | string | JWT токен сессии |
expires_at | string | Дата и время истечения (ISO 8601) |
expires_in_seconds | integer | Время до истечения в секундах |
Возможные ошибки
- 400 Bad Request - неверные параметры запроса
- 500 Internal Server Error - внутренняя ошибка сервера
Использование токена доступа
После получения токена доступа, его необходимо передавать в заголовке Authorization всех последующих запросов:
Authorization: Bearer YOUR_ACCESS_TOKEN
Пример запроса с токеном
GET /api/v1/items?store_id=store_xyz789 HTTP/1.1
Host: API_HOST
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Content-Type: application/json
Безопасность
Рекомендации по безопасности
- Никогда не публикуйте API ключи и секреты проектов в открытом доступе
- Обновляйте токены до истечения их срока действия
- Храните токены безопасно на стороне клиента
- Не передавайте токены через незащищенные каналы
- Проверяйте срок действия токенов перед использованием
Последовательность аутентификации
Рекомендуемая последовательность для начала работы с API:
- Получите API ключ (Запросите у администратора ключи для проекта)
- Получите public_key для вашего проекта
- Инициализируйте сессию используя
/api/v1/identity/auth/initсuser_idигрока - Сохраните токен из
session.tokenдля использования в последующих запросах - Используйте токен в заголовке
Authorizationдля всех защищенных эндпоинтов
Примеры кода
JavaScript (Fetch API)
// Инициализация сессии
async function initSession(userId) {
const response = await fetch('https://API_HOST/api/v1/identity/auth/init', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-public-project-key': 'YOUR_PUBLIC_PROJECT_KEY'
},
body: JSON.stringify({
user_id: userId,
device_info: {
device_id: getDeviceId(),
platform: 'web',
os_version: navigator.userAgent,
app_version: '1.0.0'
}
})
});
const data = await response.json();
return {
token: data.session.token,
stores: data.stores,
project: data.project
};
}
// Использование токена
async function getItems(token, storeId) {
const response = await fetch(`https://API_HOST/api/v1/items?store_id=${storeId}`, {
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});
return await response.json();
}
cURL
# Инициализация сессии
curl -X POST https://API_HOST/api/v1/identity/auth/init \
-H "Content-Type: application/json" \
-H "x-public-project-key: YOUR_PUBLIC_PROJECT_KEY" \
-d '{
"public_key": "pk_live_abc123xyz",
"user_id": "user_12345",
"device_info": {
"device_id": "device_abc123",
"platform": "ios",
"os_version": "17.0",
"app_version": "2.0.0"
}
}'
# Использование токена
curl -X GET "https://API_HOST/api/v1/items?store_id=store_xyz789" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json"