All checks were successful
continuous-integration/drone/push Build is passing
6.5 KiB
6.5 KiB
🔐 Emergency Service API - Руководство по авторизации
Обзор
Все эндпоинты Emergency Service API требуют авторизацию через JWT Bearer токен.
🔑 Получение токена авторизации
1. Регистрация пользователя (если нет аккаунта)
curl -X POST "http://localhost:8001/api/v1/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"email": "test@example.com",
"password": "testpass",
"full_name": "Test User",
"phone": "+1234567890"
}'
2. Получение JWT токена
curl -X POST "http://localhost:8001/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{
"username": "testuser",
"password": "testpass"
}'
Ответ:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 86400
}
🚨 Использование API Emergency Service
Авторизация через Bearer токен
Все запросы должны включать заголовок:
Authorization: Bearer <your_jwt_token>
Примеры использования
📊 Получение статистики
TOKEN="your_jwt_token_here"
curl -X GET "http://localhost:8002/api/v1/stats" \
-H "Authorization: Bearer $TOKEN"
🆘 Создание экстренного события
TOKEN="your_jwt_token_here"
curl -X POST "http://localhost:8002/api/v1/emergency/events" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"latitude": 55.7558,
"longitude": 37.6176,
"alert_type": "general",
"message": "Нужна помощь!",
"address": "Красная площадь, Москва",
"contact_emergency_services": true,
"notify_emergency_contacts": true
}'
🔍 Получение детальной информации о событии
TOKEN="your_jwt_token_here"
EVENT_ID="123"
curl -X GET "http://localhost:8002/api/v1/emergency/events/$EVENT_ID" \
-H "Authorization: Bearer $TOKEN"
💬 Ответ на событие
TOKEN="your_jwt_token_here"
EVENT_ID="123"
curl -X POST "http://localhost:8002/api/v1/emergency/events/$EVENT_ID/respond" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"response_type": "help_on_way",
"message": "Еду к вам, буду через 10 минут",
"eta_minutes": 10
}'
🏁 Завершение события
TOKEN="your_jwt_token_here"
EVENT_ID="123"
curl -X PUT "http://localhost:8002/api/v1/emergency/events/$EVENT_ID/resolve" \
-H "Authorization: Bearer $TOKEN"
🔧 Автоматизация авторизации
Bash скрипт для получения токена
#!/bin/bash
# Функция для получения токена
get_auth_token() {
local username="$1"
local password="$2"
TOKEN=$(curl -s -X POST "http://localhost:8001/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d "{\"username\": \"$username\", \"password\": \"$password\"}" | \
jq -r '.access_token')
if [ "$TOKEN" = "null" ] || [ -z "$TOKEN" ]; then
echo "❌ Failed to authenticate"
exit 1
fi
echo "$TOKEN"
}
# Использование
TOKEN=$(get_auth_token "testuser" "testpass")
echo "✅ Token obtained: ${TOKEN:0:20}..."
# Теперь можно использовать TOKEN в запросах
curl -X GET "http://localhost:8002/api/v1/stats" \
-H "Authorization: Bearer $TOKEN"
Python пример
import requests
import json
def get_auth_token(username, password):
"""Получение JWT токена"""
auth_data = {
"username": username,
"password": password
}
response = requests.post(
"http://localhost:8001/api/v1/auth/login",
json=auth_data
)
if response.status_code == 200:
return response.json()["access_token"]
else:
raise Exception(f"Authentication failed: {response.status_code}")
def emergency_api_call(token, endpoint, method="GET", data=None):
"""Универсальная функция для вызова Emergency API"""
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
url = f"http://localhost:8002{endpoint}"
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, headers=headers, json=data)
elif method == "PUT":
response = requests.put(url, headers=headers, json=data)
return response.json()
# Пример использования
if __name__ == "__main__":
# Получаем токен
token = get_auth_token("testuser", "testpass")
print("✅ Token obtained")
# Получаем статистику
stats = emergency_api_call(token, "/api/v1/stats")
print("📊 Stats:", stats)
# Создаем событие
event_data = {
"latitude": 55.7558,
"longitude": 37.6176,
"alert_type": "general",
"message": "Test emergency",
"address": "Test Address"
}
event = emergency_api_call(token, "/api/v1/emergency/events", "POST", event_data)
print("🆘 Event created:", event["id"])
🔒 Безопасность
Важные моменты:
- Храните токены безопасно - не передавайте их в URL или логах
- Токены имеют срок действия - обновляйте их регулярно
- Используйте HTTPS в продакшн среде
- Не делитесь токенами - каждый пользователь должен иметь свой токен
Обработка ошибок авторизации:
// 401 Unauthorized
{
"detail": "Could not validate credentials"
}
// 403 Forbidden
{
"detail": "Not authenticated"
}
📚 Документация API
После запуска сервиса документация доступна по адресу:
- Swagger UI: http://localhost:8002/docs
- ReDoc: http://localhost:8002/redoc
- OpenAPI JSON: http://localhost:8002/openapi.json
В Swagger UI теперь есть кнопка 🔓 Authorize для ввода Bearer токена!