88API88API
AI-приложенияAPIПомощь и поддержка

Сторонний модуль входа в систему OAuth

Описание функции

Префикс интерфейса унифицирован как http(s)://<your-domain>

В производственных средах следует использовать HTTPS, чтобы гарантировать токены аутентификации. HTTP рекомендуется только для сред разработки.

Поддерживает несколько методов входа в систему OAuth, таких как GitHub, OIDC, LinuxDO, WeChat, Telegram и т. д. Внедряет защиту CSRF и управление сеансами, а также поддерживает привязку учетной записи и автоматическую регистрацию. Внешний интерфейс обрабатывает поток OAuth посредством перенаправления.

🔐 Аутентификация не требуется

GitHub OAuth переход

  • Имя интерфейса: GitHub OAuth Jump.
  • Метод HTTP: GET
  • Путь: /api/oauth/github
  • Требования аутентификации: общедоступно.
  • Введение в функцию: обработка обратных вызовов GitHub OAuth для завершения входа пользователя или привязки учетной записи.

💡Пример запроса:

_// Передняя часть вызывается через перенаправление,обычно состоит изGitHub OAuthАвтоматический обратный звонок после авторизации  _window.location.href = `https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`;

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Вход успешен",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "github_user",
      "display_name": "GitHub User",
      "email": "user@example.com"
    }
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Администратор не активировал пропуск GitHub Войдите и зарегистрируйтесь"
}

🧾 Описание поля:

  • code (строка): код авторизации GitHub OAuth, предоставленный GitHub во время обратного вызова.
  • code (строка): код состояния защиты от CSRF, должен соответствовать тому, что хранится в сеансе.

OIDC Универсальный переход по OAuth

  • Имя интерфейса: переход OIDC Universal OAuth.
  • Метод HTTP: GET
  • Путь: code
  • Требования аутентификации: общедоступно.
  • Введение в функцию: обработка обратного вызова OIDC OAuth, поддержка универсального входа в систему по протоколу OpenID Connect.

💡Пример запроса:

_// Передняя часть вызывается через перенаправление  _
const url = new URL(auth_url);
url.searchParams.set('client_id', client_id);
url.searchParams.set('redirect_uri', `${window.location.origin}/oauth/oidc`);
url.searchParams.set('response_type', 'code');
url.searchParams.set('scope', 'openid profile email');
url.searchParams.set('state', state);
window.location.href = url.toString();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Вход успешен",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "oidc_user",
      "email": "user@example.com"
    }
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "OIDC Не удалось получить информацию о пользователе.!Пожалуйста, проверьте настройки!"
}

🧾 Описание поля:

  • code (строка): код авторизации OIDC.
  • code (строка): код состояния защиты от CSRF.

LinuxDo OAuth Jump

  • Имя интерфейса: LinuxDo OAuth Jump.
  • Метод HTTP: GET
  • Путь: code
  • Требования аутентификации: общедоступно.
  • Введение в функцию: обработка обратного вызова LinuxDo OAuth, поддержка входа через учетную запись сообщества LinuxDo.

💡Пример запроса:

_// Передняя часть вызывается через перенаправление  _
window.location.href = `https://connect.linux.do/oauth2/authorize?response_type=code&client_id=${linuxdo_client_id}&state=${state}`;

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Вход успешен",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "linuxdo_user",
      "display_name": "LinuxDo User"
    }
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Администратор закрыл регистрацию нового пользователя"
}

🧾 Описание поля:

  • code (строка): код авторизации LinuxDo OAuth.
  • code (строка): код состояния защиты от CSRF.
  • code (строка): необязательно, код ошибки OAuth.
  • code (строка): необязательно, описание ошибки.

Переход к входу в систему с кодом сканирования WeChat

  • Имя интерфейса: переход к входу в систему с кодом сканирования WeChat.
  • Метод HTTP: GET
  • Путь: code
  • Требования аутентификации: общедоступно.
  • Введение в функцию: обработка входа в систему с помощью сканированного кода WeChat и завершение процесса входа с помощью проверочного кода.

💡Пример запроса:

const response = await fetch(`/api/oauth/wechat?code=${wechat_verification_code}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Вход успешен",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "wechat_user",
      "wechat_id": "wechat_openid"
    }
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Код подтверждения недействителен или срок его действия истек."
}

🧾 Описание поля:

code (строка): код подтверждения, полученный путем сканирования кода WeChat.

Привязка аккаунта WeChat

  • Имя интерфейса: привязка учетной записи WeChat.
  • Метод HTTP: GET
  • Путь: code
  • Требования аутентификации: общедоступно.
  • Введение в функцию: привязка учетной записи WeChat к существующей учетной записи пользователя.

💡Пример запроса:

const response = await fetch(`/api/oauth/wechat/bind?code=${wechat_verification_code}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Учетная запись WeChat успешно привязана!"
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Код подтверждения недействителен или учетная запись WeChat привязана."
}

🧾 Описание поля:

code (строка): код подтверждения, полученный путем сканирования кода WeChat.

Привязка электронной почты

  • Имя интерфейса: привязка к электронной почте.
  • Метод HTTP: GET
  • Путь: code
  • Требования аутентификации: общедоступно.
  • Введение в функцию: привязка электронной почты к учетной записи пользователя с помощью кода подтверждения электронной почты.

💡Пример запроса:

const response = await fetch(`/api/oauth/email/bind?email=${email}&code=${email_verification_code}`, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Учетная запись электронной почты успешно привязана!"
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "Код подтверждения недействителен или адрес электронной почты был использован."
}

🧾 Описание поля:

  • email (строка): адрес электронной почты для привязки.
  • email (строка): код подтверждения электронной почты.

Вход в Telegram

  • Имя интерфейса: вход в Telegram.
  • Метод HTTP: GET
  • Путь: email
  • Требования аутентификации: общедоступно.
  • Введение в функцию: полный вход пользователя через виджет Telegram.

💡Пример запроса:

const params = {
  id: telegram_user_id,
  first_name: "John",
  last_name: "Doe",
  username: "johndoe",
  photo_url: "https://...",
  auth_date: 1640995200,
  hash: "telegram_hash"
};
const query = new URLSearchParams(params).toString();
const response = await fetch(`/api/oauth/telegram/login?${query}`, {
  method: 'GET'
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "Вход успешен",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "telegram_user",
      "telegram_id": "123456789"
    }
  }
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "TelegramАутентификация не удалась"
}

🧾 Описание поля:

  • id (строка): идентификатор пользователя Telegram.
  • id (строка): имя пользователя
  • id (строка): фамилия пользователя, необязательно.
  • id (строка): имя пользователя Telegram, необязательно.
  • id (строка): URL-адрес аватара, необязательно.
  • id (число): временная метка аутентификации.
  • id (Строка): хеш проверки Telegram.

Привязка аккаунта Telegram

  • Имя интерфейса: привязка аккаунта Telegram.
  • Метод HTTP: GET
  • Путь: id
  • Требования аутентификации: общедоступно.
  • Введение в функцию: привязка учетной записи Telegram к существующей учетной записи пользователя.

💡Пример запроса:

// проходитьTelegramLoginButtonКомпонент автоматически обрабатывает параметры
// Формат параметра такой же, какTelegramВойти тот же
const response = await fetch('/api/oauth/telegram/bind', {
  method: 'GET',
  params: telegram_auth_params
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "TelegramПривязка аккаунта прошла успешно!"
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "ДолженTelegramАккаунт привязан"
}

🧾 Описание поля:

Формат параметра такой же, как в интерфейсе входа в Telegram.

Получить случайное состояние (анти-CSRF)

  • Имя интерфейса: получить случайное состояние.
  • Метод HTTP: GET
  • Путь: /api/oauth/state
  • Требования аутентификации: общедоступно.
  • Введение в функцию: генерация случайных параметров состояния для защиты CSRF в процессе OAuth.

💡Пример запроса:

let path = '/api/oauth/state';
let affCode = localStorage.getItem('aff');
if (affCode && affCode.length > 0) {
  path += `?aff=${affCode}`;
}
const response = await fetch(path, {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Пример успешного ответа:

{
  "success": true,
  "message": "",
  "data": "random_state_string_12chars"
}

❗ Пример реакции на ошибку:

{
  "success": false,
  "message": "генерироватьstateнеудача"
}

🧾 Описание поля:

  • aff (строка): необязательный параметр кода рекомендации, используемый для записи источника пользователя.
  • aff (строка): возвращается строка случайного состояния длиной 12 бит.