Перейти к содержанию

Аутентификация

Система аутентификации платформы MONO основана на цифровых подписях EOSIO. Каждый пользователь владеет парой криптографических ключей — приватным и публичным. Приватный ключ используется для создания цифровой подписи, а публичный ключ позволяет проверить подлинность этой подписи. Аутентификация происходит путем подписания случайного вызова сервера приватным ключом пользователя.

В системе MONO используется двухтокенная схема аутентификации: - 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 запроса с помощью декораторов @AuthRoles.

Безопасность

  • Все токены имеют ограниченное время жизни
  • Используется криптография уровня блокчейна EOSIO
  • Поддерживается черный список refresh token
  • Процесс восстановления ключей защищен email-верификацией (см. раздел "Аккаунты")