
Зарегистрируйте приложение в Лисайбер.Панели, заполните необходимые поля. После регистрации приложение появится в вашем личном кабинете. Чтобы открыть страницу приложения выберите его из списка. Вы можете отредактировать или удалить выбранное приложение, а также создать новое.
На странице приложения отображаются его основные параметры:
Client ID — уникальный идентификатор приложения. Идентификатор нельзя изменить.
Client secret — секретный ключ приложения, которым будет подписан jwt-токен с информацией о пользователе.
Redirect URI — адрес страницы, на который пользователь будет перенаправлен после авторизации. Страница по указанному адресу также будет принимать OAuth-токен.
Параметры понадобятся для авторизации приложения на этапах получения oAuth-токена и при выполнении запроса данных о пользователе.
1. Ваше приложение перенаправляет пользователя на страницу авторизации;
2. Пользователь входит в панель (если не авторизован);
3. Пользователь видит экран согласия с запрашиваемыми правами;
4. После подтверждения — перенаправление на redirect_uri с code;
5. Ваш бэкенд обменивает code на access_token (с client_secret);
6. API-запросы выполняются с заголовком Authorization: Bearer {access_token}.
Перенаправьте пользователя на страницу: https://dash.leecyber.com/authorize/{client_id}.
Query-параметры
Параметр | Обязательный | Описание |
redirect_uri | Да | URI callback. Должен точно совпадать с Redirect URL в настройках приложения |
response_type | Да | Укажите code |
scope[] | Нет | Запрашиваемый доступ. Можно передать несколько: scope[]=id.read&scope[]=org.billing. Если не указаны — используются scopes из настроек приложения |
state | Рекомендуется | Случайная строка для защиты от CSRF. Вернётся в callback |
code_challenge | Нет | PKCE challenge (см. PKCE) |
code_challenge_method | Нет | Метод PKCE: S256 (по умолчанию) или plain |
На странице /authorize/{client_id} панель:
1. Проверяет `client_id` и `redirect_uri`;
2. Если пользователь не авторизован — показывает форму входа;
3. Показывает экран согласия: название приложения, иконка, список запрашиваемых прав ;
4. После нажатия «Продолжить» — выполняет авторизацию.
Если пользователь уже выдавал доступ этому приложению, панель может автоматически перенаправить на `redirect_uri` с `code` без повторного экрана согласия.
После успешной авторизации браузер перенаправляется на ваш redirect_uri: https://my-app.example.com/oauth/callback?code=AUTH_CODE_HERE&state=k7x9m2p4q1.
Важно: обмен `code` на токен выполняется только на сервере. Никогда не передавайте и не публикуйте `client_secret`.
POST https://api.leecyber.com/v3/oauth/token
Content-Type: application/json
Тело запроса
JSON{
"grant_type": "authorization_code",
"code": "AUTH_CODE_HERE",
"redirect_uri": "https://my-app.example.com/oauth/callback",
"client_id": "client_id_abc123",
"client_secret": "client_secret_xyz789"
}
Ответ
JSON{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"refresh_token": "dGhpcyBpcyBhIHJlZnJlc2g...",
"expires_in": 86400,
"token_type": "Bearer"
}
Пример кода
async function exchangeCode(code) {
const response = await fetch('https://api.leecyber.com/v3/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
grant_type: 'authorization_code',
code,
redirect_uri: process.env.LC_REDIRECT_URI,
client_id: process.env.LC_CLIENT_ID,
client_secret: process.env.LC_CLIENT_SECRET,
}),
});
if (!response.ok) {
const err = await response.json().catch(() => ({}));
throw new Error(err.message || 'Token exchange failed');
}
return response.json();
}
Передайте токен в заголовке Authorization. В формате: Bearer {access_token}.
Пример кода
const response = await fetch('https://api.leecyber.com/v3/org/billing', { headers: { Authorization: `Bearer ${accessToken}`, }, });
Когда access_token истекает, обновите его через refresh_token:
POST https://api.leecyber.com/v3/oauth/token
Content-Type: application/json
{ "grant_type": "refresh_token", "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2g...", "client_id": "client_id_abc123", "client_secret": "client_secret_xyz789" }
Ответ — новая пара access_token + refresh_token (аналогично обмену code).
Для публичных клиентов (SPA, мобильные приложения) поддерживается PKCE.
Шаг 1. Генерация challenge
function generatePkce() {
const verifier = crypto.randomBytes(32).toString('base64url');
const challenge = crypto
.createHash('sha256')
.update(verifier)
.digest('base64url');
return { verifier, challenge };
}
Шаг 2. Авторизация с PKCE
Шаг 3. Обмен code с verifier
{
"grant_type": "authorization_code",
"code": "...",
"redirect_uri": "...",
"client_id": "...",
"code_verifier": "original_verifier_string"
}
Scopes (доступы) задаются при регистрации приложения и могут быть уточнены в authorize URL. Запрашивать можно только scopes, разрешённые для oAuth-приложений организации. Список доступных scopes можно посмотреть при создании oAuth-приложения или его редактировании. Запрашивайте минимально необходимый набор scopes.