Skip to content

Восстановление пароля

Alien Ufo edited this page Jan 31, 2021 · 3 revisions

Восстановить пароль пользователя можно несколькими способами:

  • По электронному адресу;
  • По номеру телефона.

Далее по тексту идентификатору.

ВНИМАНИЕ: Идентификатор (email, телефон) должен быть ранее верифицирован (подтвержден) в системе.

Восстановление пароля происходит в два этапа, но с небольшими различиями для каждого из способов.

Алгоритм восстановления пароля по электронному адресу:

  • На первом этапе передаётся электронный адрес. Если указанный электронный адрес обнаружен и подтверждён в системе то на него высылается письмо с ссылкой (URI) для перехода на станицу установки нового поля. В ответ система выдает талон восстановления пароля (recovery ticket). Обратите внимание, что если электронный адрес не обнаружен или не подтверждён то талон будет намеренно фальшивым (что-бы нельзя было определить зарегистрирован ли пользователь с указанным электронным адресом);

  • На втором этапе, после перехода пользователя по ссылке и ввода нового пароля, вызывается метод сброса пароля, который принимает на входе три параметра: талон восстановления пароля (recovery ticket), секретный ответ (security answer) и новый пароль пользователя (password). Первые два параметра будут содержаться в URI перехода на станицу установки нового поля.

Формат URI:

<schema>://<host:[port]>/user/password/recovery/<recovery-ticket>/<security-answer>

Пример:

https://example.ru/user/password/recovery/bc0d227a-a493-4382-9b47-32c48f8ef650/f444f0a5d3408ffb415f45cf09466845fe22b358

Алгоритм восстановления пароля по номеру телефона:

  • На первом этапе передаётся номер телефона. Если указанный номер обнаружен и подтверждён в системе то на него высылается SMS/Push сообщение с числовым кодом восстановления пароля (секретным ответом). В ответ система выдает талон восстановления пароля (recovery ticket). Талон нужно запомнить. Обратите внимание, что если номер телефона не обнаружен или не подтверждён то талон будет намеренно фальшивым (что-бы нельзя было определить зарегистрирован ли пользователь с указанным номером телефона);

  • На втором этапе, после получения от пользователя кода (секретного ответа) из отправленного сообщения, вызывается метод сброса пароля, который принимает на входе три параметра: талон восстановления пароля (recovery ticket), секретный ответ (security answer) и новый пароль пользователя (password).

ВНИМАНИЕ: Запросы должны выполнять от имени OAuth2-клиента.

API

Восстановить пароль пользователя

POST /api/v1/user/password/recovery

Запускает процедуру восстановления пароля пользователя.

Параметры запроса:

Имя Тип Описание
identifier STRING Обязательный. Идентификатор пользователя (username, email, phone).

Формат ответа:

Поле Тип Описание
ticket UUID Талон восстановления пароля.

Проверить секретный ответ

POST /api/v1/user/security/answer

Сверяет секретный ответ.

Параметры запроса:

Имя Тип Описание
ticket UUID Обязательный. Талон восстановления пароля (recovery ticket).
securityanswer STRING Обязательный. Секретный ответ (security answer).

Формат ответа:

Поле Тип Описание
result BOOLEAN Результат выполнения запроса.
message STRING Сообщение.

Переустановить пароль

POST /api/v1/user/password/reset

Сбрасывает пароль пользователя.

Параметры запроса:

Имя Тип Описание
ticket UUID Обязательный. Талон восстановления пароля (recovery ticket).
securityanswer STRING Обязательный. Секретный ответ (security answer).
password STRING Обязательный. Новый пароль пользователя.

Формат ответа:

Поле Тип Описание
result BOOLEAN Результат выполнения запроса.
message STRING Сообщение.

Примеры запросов:

POST /api/v1/user/password/recovery HTTP/1.1
Host: localhost:8080
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[сокращенно для краткости].NorYsi-Ht826HUFCEArVZ60_dEUmYiJYXubnTyweIMg
Content-Type: application/json

{"identifier": "[email protected]"}
POST /api/v1/user/password/reset HTTP/1.1
Host: localhost:8080
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[сокращенно для краткости].NorYsi-Ht826HUFCEArVZ60_dEUmYiJYXubnTyweIMg
Content-Type: application/json

{"ticket": "bc0d227a-a493-4382-9b47-32c48f8ef650", "securityanswer": "f444f0a5d3408ffb415f45cf09466845fe22b358", "password": "NewPassword"}
POST /api/v1/user/password/recovery HTTP/1.1
Host: localhost:8080
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[сокращенно для краткости].NorYsi-Ht826HUFCEArVZ60_dEUmYiJYXubnTyweIMg
Content-Type: application/json

{"identifier": "79001234567"}
POST /api/v1/user/password/reset HTTP/1.1
Host: localhost:8080
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.[сокращенно для краткости].NorYsi-Ht826HUFCEArVZ60_dEUmYiJYXubnTyweIMg
Content-Type: application/json

{"ticket": "54587c84-063e-43d0-9160-27544c5d811e", "securityanswer": "337789", "password": "NewPassword"}
Clone this wiki locally