- Автентифікація відповідає на питання «хто ви?»: перевіряє токен, ключ, пароль.
- Авторизація - «що вам можна?»: чи має цей користувач право на цю дію з цим ресурсом.
Спершу автентифікація, потім авторизація. Помилки - різні: 401 - не вдалося встановити, хто ви; 403 - відомо, хто ви, але дія заборонена.
Способи автентифікації в API:
- API-ключ у заголовку (
X-API-KeyчиAuthorization: Bearer ...) - для серверних інтеграцій. - Токени користувачів - персональні токени доступу (Laravel Sanctum) чи токени OAuth 2.0.
- Cookie-сесія - для власного SPA на тому самому домені (Sanctum SPA-режим), з CSRF-захистом.
- JWT - самодостатній підписаний токен; сервер перевіряє підпис без запиту до бази, але відкликати такий токен до закінчення терміну складніше.
Авторизація - на кожному ендпоінті, на сервері:
public function update(UpdateOrderRequest $request, Order $order)
{
$this->authorize('update', $order); // чи це замовлення цього користувача
// ...
}
Найпоширеніша вразливість API (OWASP API Top 10, BOLA) - є автентифікація, але немає перевірки прав на конкретний об'єкт: GET /orders/43 повертає чуже замовлення, бо код перевірив лише, що користувач залогінений.
Ще правила: токени лише по HTTPS, ніколи в URL (потраплять у логи й історію браузера), з обмеженим терміном дії й мінімально потрібними правами (scopes).