Авторизация пользователя
Авторизация необходима для получения доступа к данным, которые относятся непосредственно к Вашей организации. Авторизация строится на взаимодействии с Coopenomics, где Вам необходимо предварительно зарегистрироваться и получить имя пользователя ACCOUNT_NAME и приватный ключ PRIVATE_KEY.
Существует два типа пользователя: частное лицо и организация. Вы можете получить ACCESS_TOKEN для любого типа пользователя. Нужно учесть, что некоторые операции, такие как создание организации, департаментов и назначение авторизованных лиц, требуют приватный ключ именно самой организации, а не частного лица.
Для того чтобы получить авторизационный токен необходимо подписать текущую метку времени в формате ISO 8601 для UTC зоны YYYY-MM-DDTHH:MM:SS.000Z. Подписание проводится с использованием приватного ключа организации. Подписание производится на стороне клиента и приватные ключи не передаются по сети.
- Javascript
- Python
/* Используется библиотека eosjs_ecc */
/* корректировка для UTС даты (с +3:00 до 0:00) */
const addHours = 3;
const correctedDate = new Date(Date.now() - addHours * (60 * 60 * 1000) ).toISOString();
const signature = eosjs_ecc.sign(correctedDate, PRIVATE_KEY)
import hashlib
from datetime import datetime, timedelta
#Используется библиотека aioeos
from aioeos.keys import EosKey
#корректировка для UTС даты (с +3:00 до 0:00)
date_utf = datetime.now() - timedelta(hours=3)
corrected_date = date_utf.isoformat("T", "milliseconds") + 'Z'
priv = EosKey(private_key=PRIVATE_KEY)
digest = hashlib.sha256(corrected_date.encode('utf-8')).digest()
signature = priv.sign(digest)
Скорректируйте Ваше локальное время в GMT +0.00. Запрос на авторизацию должен быть осуществлен не позднее 60 секунд с момента подписания текущей метки времени.
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: "2024-12-31T23:59:59.000Z",
public_key: "PUB_2vdgsd...",
signature: "SIG_K1_KbiL3cwjAmw...",
account: ACCOUNT_NAME,
})
});
const result = await response.json();
mutation TokenMutation {
manageAccess(
message: "2024-12-31T23:59:59.000Z"
public_key: "PUB_2vdgsd..."
signature: "SIG_K1_KbiL3cwjAmw..."
account: ACCOUNT_NAME
) {
data {
expiration
id
token
}
ok
}
}
В результате запроса вы получите ACCESS_TOKEN c его сроком действия. Каждый токен содержит уникальный ID, который можно использовать для его удаления и прекращения действия прав доступа.
{
"tokens": [
"access": {
"expires": "2025-12-31T23:59:59.000Z",
"token": ACCESS_TOKEN
},
"refresh": {
"expires": "2025-12-31T23:59:59.000Z",
"token": REFRESH_TOKEN
},
],
"token_type": "bearer",
"id": "GU8tqKBg_YdQTGpAM...",
"expires_in": 34609347 /* Секунд до окончания срока действия */
}
REFRESH_TOKEN необходим для того чтобы обновить ACCESS_TOKEN, который больше не действителен. Таким образом проводится ротация прав доступа для усиления безопасности.
- REST API
const response = await fetch(ENDPOINT_URL + '/v1/token/refresh', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
token: REFRESH_TOKEN
})
});
const result = await response.json();
mutation TokenMutation {
refreshAccess(
token: REFRESH_TOKEN
) {
data {
expiration
id
token
}
ok
}
}
Все последующие методы являются защищенными и необходимо использовать ACCESS_TOKEN в заголовке "Authorization" каждого запроса:
{"Authorization": "Bearer ACCESS_TOKEN"}
Информацию о текущем пользователе можно получить с помощью следующего метода:
- REST API
const response = await fetch(ENDPOINT_URL + '/v1/auth/me', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
});
const result = await response.json();
Другие методы, которые могут вам понадобиться указаны в документации Авторизация пользователя
Итак, начнем! Открываем новый магазин с помощью приватных методов.
Подробнее: Organization and Shop Setup