API авторизация - mesto-co/core GitHub Wiki

/v1/auth/magicLink

Параметр Значение
Method POST
Authorization -
Query parameters -
  • При получении запроса по параметру rq.email найти пользователя в таблице Users, если не найден вернуть ошибку 404
  • Сформировать AuthToken, записать его в Таблицу UserToken, обязательно должно быть сгенерировано время действия токена, опционально автоматическое удаление записей по заданному интервалу времени.
  • вернуть в ответ статус 200 и tokenId

Пример запроса

{
	"email": "[email protected]",
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}

Пример ответа

HTTPStatus.ok
{
	"tokenId": "magic-link-jwt",
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}

/v1/email/sendMagicLink

Параметр Значение
Method POST
Authorization -
Query parameters -
  • При получении запроса по параметру rq.email найти пользователя в таблице Users со статусом Approved, если не найден вернуть ошибку 404
  • По параметру rq.tokenId найти токен в таблице UserToken, если не найден вернуть ошибку 404
  • Проверить не протух ли токен, если протух вернуть ошибку 404
  • Сформировать Magic Link с AuthToken
  • Отправить Magic Link на email указанный в профиле найденного пользователя.
  • вернуть в ответ статус 200

Пример запроса

{
	"email": "[email protected]",
	"tokenId": "magic-link-jwt",
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}

Пример ответа

HTTPStatus.ok
{
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}

/v1/auth/refresh

Параметр Значение
Method POST
Authorization -
Query parameters -
  • Проверка валидности (подпись + время жизни) refresh jwt токена переданного в body refreshToken, если не валидный вернуть ошибку 401,
  • При получении запроса осуществляет поиск токена переданного в body в таблице UserToken, если не найден вернуть ошибку 401,
  • Проверяем что пользователь со статусом Approved, если не найден вернуть ошибку 401
  • Генерируем AccessToken, RefreshToken
  • Удалить запись из таблицы UserToken по переданному в body refreshToken
  • Новый refreshToken записать в таблицу UserToken
  • Вернуть в ответ accessToken и refreshToken

Пример запроса

{
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
	"refreshToken": "refresh-roken-jwt"
}

Пример ответа

{
	"accessToken": "someAccessToken.In.JWTFormat",
	"refreshToken": "someStringInBase64Format==",
	"RqUid": "d5ab3356-f4b4-11ea-adc1-0242ac120002",
}

/v1/signup

Параметр Значение
Method POST
Authorization -
Query parameters -
  • Получить из запроса поля
  • Проверить, что почта - это почта,
  • Отправить на почту ссылку для проверки почты, для этого сформировать токен для проверки почты - пункт опциональный
  • В поле пароль заприсать Hash от переданного passwordHash
  • создать запись в БД со статусом Awaiting

Пример запроса

{
	"firstName": "",
	"surame": "",
	"middleName": "",
	"username": "",
	"imagePath":"",
	"location":"",
	"about": "",
	"role":"",
	"passwordHash": "",
}

Пример ответа

{
	"firstName": "",
	"surame": "",
	"middleName": "",
	"username": "",
	"imagePath":"",
	"location":"",
	"about": "",
	"role":""
}

/v1/password - Запрос на получение ссылки для установки пароля

Параметр Значение
Method GET
Authorization -
Query parameters email
  • Получить запрос, извлечь email.
  • По email найти пользователя в БД, если не найден вернуть ошибку 404
  • Сгенерировать одноразовый токен для восстановления пароля,
  • Сформировать email по шаблону восстановления пароля, с указанием токена
  • Отправить письмо на email из профиля пользователя

api/v1/password - Запрос на установку пароля

Параметр Значение
Method PUT
Authorization -
Query parameters -
  • Получить запрос, извлечь тело запроса
  • Найти в БД пользователя по токену из запроса.
  • Установить в поле passwordHash - hash от переданного пароля.
  • В ответ передать статус 200 ok

Выбор алгоритма хеширования на усмотрение разработчика, реализующего функционал. Чисто, как предложение использовать алгоритм Bcrypt (16 round). ВАЖНО. При аутентификации пользователя по паролю должен использоваться тот же самый алгоритм хеширования.

Пример запроса

{
  "passwordHash": "string", - с фронта должен быть передан Хеш от пароля введенного пользователем
  "authToken":"string" - токен, сформированный для восстановления пароля.
}

Общее

Для писем должны быть реализованы шаблоны. В текущий момент шаблоны могут лежать на диске сервера приложений в какой либо папке, в будущем планируется перенос текста шаблонов в БД.