Сервис для ведения БД пользователей и контроля их сессий. Используются принципы чистой архитектуры.
Доступ к сервису осуществляется только через запросы подписанные JWT токеном которые генерируется при запуске и сохраняется в ENV.
Скачать репозиторий:
git clone https://github.com/giicoo/go-auth-service
cd go-auth-service
Собрать образ докера:
docker build -t auth:1.0 .
Запустить docker-compose:
docker-compose up --build
Swagger-docs: http://localhost:8080/swagger/index.html
request:
{
"email": "string",
"password": "string"
}
response:
{
"id": 0,
"email": "string",
}
Проверка отсутствия аккаунта с этим email. Пароль хешируется с помощью bcrypt
. User записывается записывается в БД
request:
{
"id":0
}
response:
{
"message": "user successfully deleted"
}
Удаление из БД по ID из Session
request:
{
"id":0,
"new_email": "string"
}
response:
{
"message": "user success update"
}
Проверка не занят ли новый email. Обновление полей в БД по ID из Session
request:
{
"id":0,
"new_password": "string"
}
response:
{
"message": "user success update"
}
Хеширование нового пароля с помощью bcrypt. Обновление полей в БД по ID из Session
request:
id: integer
response:
{
"id": 0,
"email": "string",
}
Получение user из БД
request:
{
"email": "string",
"password": "string"
}
response:
{
"id": 0,
"email": "string",
}
Проверка пароля
Redis
request:
{
"user_id": 0,
"user_ip": "string",
"user_agent": "string"
}
response:
{
"session_id": "string",
}
SessionID генерируется как 32 рандомных бит Добавляется в Redis:
- session <session_id>{"user_id": int, "user_ip": "string", "user_agent": "string"}
- user_sessions <user_id>["session_id",...]
request:
session_id: string
response:
{
"session_id": "string",
"user_id": 0,
"user_ip": "string",
"user_agent": "string"
}
Получение из Redis: session <session_id>
request:
user_id: int
response:
[
{
"session_id": "string",
"user_id": 0,
"user_ip": "string",
"user_agent": "string"
},
...
]
Получение из Redis: user_sessions <user_id>
request:
{
"session_id": "string"
}
response:
{
"message": "session successfully deleted"
}
Удаление сессии session_id из Redis: session <session_id> если у сессий совпадает user_id Удаление сессии из списка сессий юзера
request:
{
"user_id": "string"
}
response:
{
"message": "sessions successfully deleted"
}
Удаление сессий по user_id из Redis: user_sessions <user_id>