01Пользователь не предоставил действительные credentials. Какой результат уместен?
Тема
Тема
Authentication (AuthN) отвечает на вопрос «кто ты?». Authorization (AuthZ) — «что тебе можно?».
Их нельзя смешивать: знание личности не означает право на действие.
| Подход | Где состояние | Плюсы | Минусы |
|---|---|---|---|
| Session cookie | Сервер / store | Простой отзыв | Нужен общий storage |
| JWT access token | Клиент | Удобно для API | Отзыв сложнее |
| Opaque token | Сервер | Контролируемый отзыв | Лишний lookup |
// authz.ts
export function assertCanReadOrder(user: { id: string; roles: string[] }, orderOwnerId: string) {
if (user.roles.includes("admin")) return;
if (user.id !== orderOwnerId) {
throw new Error("forbidden");
}
}// authz.go
func assertCanReadOrder(user User, orderOwnerID string) error {
for _, role := range user.Roles {
if role == "admin" {
return nil
}
}
if user.ID != orderOwnerID {
return errors.New("forbidden")
}
return nil
}<?php
// authz.php
function assertCanReadOrder(User $user, string $orderOwnerId): void
{
if (in_array('admin', $user->roles, true)) {
return;
}
if ($user->id !== $orderOwnerId) {
throw new ForbiddenException();
}
}userId / role из тела запроса.HttpOnly, Secure, подходящий SameSite.