Ответ
Да, я использовал токены для аутентификации в REST API, в основном JWT (JSON Web Tokens) и Bearer-токены. Это стандартный подход для stateless-аутентификации.
Сетевой аспект и практика:
- Передача токена: Токен передается в HTTP-заголовке
Authorization: Bearer <token>. Это чистая реализация на уровне протокола HTTP. - Безопасность: Критически важно использовать HTTPS (TLS) для шифрования всего трафика, иначе токен может быть перехвачен. Я настраивал срок жизни токена (TTL) и использовал refresh-токены для обновления сессии без повторного ввода логина/пароля.
- Пример проверки на стороне сервера (Node.js с Express):
const jwt = require('jsonwebtoken');
const express = require('express');
const app = express();
// Middleware для проверки токена
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; // Извлекаем Bearer <token>
if (!token) return res.sendStatus(401); // Unauthorized
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403); // Forbidden (токен невалиден)
req.user = user;
next();
});
}
// Защищенный маршрут
app.get('/api/protected-data', authenticateToken, (req, res) => {
res.json({ data: 'Секретные данные для пользователя ' + req.user.id });
});
В сетевой архитектуре это позволяет легко масштабировать сервисы, так как каждый запрос самодостаточен и не требует хранения состояния сессии на сервере.