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

Получите токены доступа и настройте аутентификацию

Обзор аутентификации (API v2)

В API WebAsk есть два основных способа авторизации:

  • По API‑ключу (рекомендуется) — вы создаёте ключ в личном кабинете и передаёте его в заголовке Authorization: Bearer YOUR_API_TOKEN. Это самый простой и стабильный способ для интеграций.
  • По логину и паролю — вы выполняете запросы регистрации/входа (email + пароль), получаете токен и далее также используете его в заголовке Authorization. Этот способ полезен, если нужно программно создавать пользователей.

В обоих случаях API v2 использует Laravel Sanctum и токены формата user_id|random_string. Для регистрации и входа по логину/паролю требуется CSRF‑токен, для всех остальных запросов — только Bearer‑токен в заголовке Authorization.

Важно

CSRF‑токен нужен только для запросов /register и /login. Для всех остальных запросов используйте только Bearer‑токен.

Скачайте markdown‑версию раздела «Аутентификация» для использования в ChatGPT / других LLM:

Шаг 1. Получить CSRF cookie

Запрос GET /sanctum/csrf-cookie

Перед регистрацией или входом выполните запрос для получения cookie XSRF-TOKEN.

GET /sanctum/csrf-cookie
curl -X GET "https://api.webask.io/sanctum/csrf-cookie" \
  -H "Accept: application/json" \
  -c cookies.txt

Важно

Значение XSRF-TOKEN из cookie нужно передавать в заголовке X-XSRF-TOKEN (URL‑декодированное) при запросах /api/v2/service/register и /api/v2/service/login.

Шаг 2–3. Регистрация и вход

Зарегистрируйте нового пользователя или выполните вход и получите Bearer‑токен, который затем будет использоваться во всех защищенных запросах API v2.

Регистрация POST /api/v2/service/register

Создает нового пользователя и возвращает токен и данные пользователя. Запрос выполняется после получения CSRF‑cookie.

POST /api/v2/service/register
curl -X POST "https://api.webask.io/api/v2/service/register" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "X-Requested-With: XMLHttpRequest" \
  -H "Referer: https://api.webask.io" \
  -H "Origin: https://api.webask.io" \
  -H "X-XSRF-TOKEN: YOUR_XSRF_TOKEN_FROM_COOKIE" \
  -b cookies.txt \
  -d '{
    "name": "Иван Иванов",
    "email": "ivan@example.com",
    "password": "SecurePassword123"
  }'

В ответе вы получите токен формата 1|abcdefghijklmnopqrstuvwxyz1234567890 и объект user.

Вход POST /api/v2/service/login

Аутентифицирует существующего пользователя и возвращает такой же постоянный токен. CSRF‑cookie и заголовок X-XSRF-TOKEN обязательны.

POST /api/v2/service/login
curl -X POST "https://api.webask.io/api/v2/service/login" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "X-Requested-With: XMLHttpRequest" \
  -H "Referer: https://api.webask.io" \
  -H "Origin: https://api.webask.io" \
  -H "X-XSRF-TOKEN: YOUR_XSRF_TOKEN_FROM_COOKIE" \
  -b cookies.txt \
  -d '{
    "email": "ivan@example.com",
    "password": "SecurePassword123"
  }'

В ответе также возвращается токен и объект пользователя. Один пользователь имеет один постоянный токен.

Информация о текущем пользователе GET /api/v2/service/user

После получения токена вы можете запросить информацию о владельце токена.

GET /api/v2/service/user
curl -X GET "https://api.webask.io/api/v2/service/user" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json"

Шаг 4. Использование Bearer‑токена

Добавьте токен в заголовок Authorization всех защищенных запросов к API v2:

GET /api/v2/service/quiz
curl -X GET https://api.webask.io/api/v2/service/quiz \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

JavaScript (fetch)

fetch('https://api.webask.io/api/v2/service/quiz', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_TOKEN',
    'Content-Type': 'application/json'
  }
})
.then(response => response.json())
.then(data => console.log(data));

Python (requests)

import requests

headers = {
    'Authorization': 'Bearer YOUR_TOKEN',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.webask.io/api/v2/service/quiz', headers=headers)
data = response.json()

PHP (cURL)

$url = 'https://api.webask.io/api/v2/service/quiz';
$token = 'YOUR_TOKEN';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json'
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $data = json_decode($response, true);
    echo json_encode($data, JSON_PRETTY_PRINT);
} else {
    echo "Error: HTTP $httpCode";
}

PHP (Guzzle)

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;

$client = new Client();
$token = 'YOUR_TOKEN';

try {
    $response = $client->get('https://api.webask.io/api/v2/service/quiz', [
        'headers' => [
            'Authorization' => 'Bearer ' . $token,
            'Content-Type' => 'application/json'
        ]
    ]);
    
    $data = json_decode($response->getBody(), true);
    echo json_encode($data, JSON_PRETTY_PRINT);
} catch (RequestException $e) {
    echo "Error: " . $e->getMessage();
}

Рекомендации по безопасности

Не делайте

  • Не передавайте токены в URL параметрах
  • Не коммитьте токены в публичные репозитории
  • Не передавайте токены в клиентском коде
  • Не используйте один токен для разных приложений

Рекомендуется

  • Используйте переменные окружения для хранения токенов
  • Регулярно ротируйте токены
  • Используйте HTTPS для всех запросов

Обработка ошибок аутентификации

Коды ошибок

Код Описание Решение
401 Неверный или отсутствующий токен Проверьте правильность токена в заголовке Authorization
403 Токен не имеет прав доступа Проверьте права доступа токена в настройках
429 Превышен лимит запросов Уменьшите частоту запросов или обновите тарифный план