Аутентификация
Аутентификация¶
Система аутентификации платформы ЦК основана на цифровых подписях EOSIO. Каждый пользователь владеет парой криптографических ключей — приватным и публичным. Приватный ключ используется для создания цифровой подписи, а публичный ключ позволяет проверить подлинность этой подписи. Аутентификация происходит путем подписания случайного вызова сервера приватным ключом пользователя.
В системе ЦК используется двухтокенная схема аутентификации: - Access Token — для доступа к API с коротким временем жизни - Refresh Token — для обновления access token с длительным временем жизни
Это обеспечивает баланс между безопасностью и удобством использования.
Вход в систему¶
🛠️ SDK: Mutations.Auth.Login | 🔗 GraphQL API: Mutation.login
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Auth.Login.IInput = {
data: {
email: <string>; // Электронная почта
now: <string>; // Метка времени в строковом формате ISO
signature: <string>; // Цифровая подпись метки времени
};
};
const { [Mutations.Auth.Login.name]: result } = await client.Mutation(
Mutations.Auth.Login.mutation,
{ variables }
);
Результат:
interface IOutput {
}
Процесс входа в систему: 1. Клиент отправляет имя пользователя 2. Сервер возвращает случайный challenge 3. Клиент подписывает challenge приватным ключом 4. Сервер проверяет подпись и выдает токены
Обновление токена¶
🛠️ SDK: Mutations.Auth.Refresh | 🔗 GraphQL API: Mutation.refresh
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Auth.Refresh.IInput = {
data: {
access_token: <string>; // Токен доступа
refresh_token: <string>; // Токен обновления
};
};
const { [Mutations.Auth.Refresh.name]: result } = await client.Mutation(
Mutations.Auth.Refresh.mutation,
{ variables }
);
Результат:
interface IOutput {
}
Refresh token имеет более длительное время жизни и используется для получения новых access token без повторной аутентификации.
Выход из системы¶
🛠️ SDK: Mutations.Auth.Logout | 🔗 GraphQL API: Mutation.logout
import { Mutations } from '@coopenomics/sdk';
const variables: Mutations.Auth.Logout.IInput = {
data: {
access_token: <string>; // Токен обновления
refresh_token: <string>; // Токен доступа
};
};
const { [Mutations.Auth.Logout.name]: result } = await client.Mutation(
Mutations.Auth.Logout.mutation,
{ variables }
);
Результат:
interface IOutput {
}
При выходе из системы refresh token добавляется в черный список, что делает невозможным его дальнейшее использование.
Роли и права доступа¶
Система поддерживает следующие роли:
-
chairman — председатель совета (полные права)
-
member — член совета (ограниченные права)
-
user — пайщик (минимальные права)
Установка прав доступа осуществляется автоматически на основании событий блокчейна, таких как приём нового пайщика или добавления пайщика в совет кооператива. Проверка прав доступа осуществляется для каждого GraphQL запроса/мутации/подписки.