Аутентификация
Получите токены доступа и настройте аутентификацию
Обзор аутентификации (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.
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.
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 обязательны.
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
После получения токена вы можете запросить информацию о владельце токена.
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:
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 | Превышен лимит запросов | Уменьшите частоту запросов или обновите тарифный план |