Ответ
В проекте была реализована аутентификация и авторизация на основе OAuth 2.0 / OpenID Connect (OIDC) с использованием JWT (JSON Web Tokens).
Архитектура:
- Identity Provider (IdP): Keycloak. Отвечал за аутентификацию пользователей, выдачу и валидацию токенов.
- Токены: Использовался Access Token (JWT) для доступа к API и Refresh Token для его обновления.
- Авторизация: Ролевая модель (RBAC). В claims JWT-токена передавались роли пользователя (например,
ROLE_USER,ROLE_ADMIN).
Пример защиты endpoint на стороне backend (Spring Security):
@RestController
@RequestMapping("/api/orders")
public class OrderController {
@GetMapping
@PreAuthorize("hasRole('USER')") // Аннотация для проверки роли
public ResponseEntity<List<OrderDto>> getUserOrders() {
// ... логика получения заказов текущего пользователя
}
@DeleteMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')") // Только администратор
public ResponseEntity<Void> deleteOrder(@PathVariable Long id) {
// ... логика удаления
}
}
Почему JWT? Статистичность токена позволяет не хранить сессию на сервере (stateless), что повышает масштабируемость. Валидация подписи токена происходит быстро.