Микросервис otp-verifier
Микросервис otp-verifier отправляет одноразовые пароли, необходимые для регистрации и авторизации в системе. Он также хранит информацию об отправленных кодах, полученных JWT-токенах, осуществляет аудит данных и проверяет соответствие одноразового пароля отправленному коду.
Доступ к микросервису предоставляется по запросу.
Логика работы микросервиса
В работе микросервиса участвует сущность Временный код, которая содержит данные для верификации пользователя по одноразовому паролю, который был отправлен через sms или звонок (номер телефона, код, время выдачи, истечение срока действия, количество попыток соответствия, тип отправки временного кода, область использования).
При соответствии одноразового пароля отправленному коду генерируется JWT-токен, который имеет срок жизни 5 минут. Для генерации подписей JWT-токена используется алгоритм RS256.
Аутентификация и авторизация
Не требуются.
Service context path
/api/otp-verifier/
Настройки и параметры конфигурации микросервиса
Параметры конфигурации указываются в Vault.
Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания.
{
"env": {
"DB_HOST": "хост для подключения к БД",
"DB_PASSWORD": "пароль для обычного пользователя БД",
"DB_PASSWORD_MIGRATION": "пароль пользователя БД, выполняющего миграцию",
"INTEGRATION_IDGTL_TOKEN": "IDGTL_token",
"INTEGRATION_IDGTL_URL": "https://xxxxx.yy",
"JAVA_XMS": "XXm",
"JAVA_XMX": "YYYm",
"KAFKA_BROKER_ADDRESS": "адрес_брокера_kafka",
"LOGGING_LEVEL": "INFO",
"OTP_CALL_AUTHOR_NAME": "ecom_call",
"OTP_CALL_ENABLED": "true",
"OTP_CALL_INTEGRATION": "blank",
"OTP_MAX_CONCURRENT_SESSIONS": "5",
"OTP_MAX_SEND_ATTEMPTS": "5",
"OTP_PUSH_ENABLED": "false",
"OTP_PUSH_FIREBASE_CREDENTIALS": "firebase_credentials",
"OTP_PUSH_FIREBASE_ENABLED": "true",
"OTP_PUSH_INTEGRATION_ENABLED": "true",
"OTP_PUSH_TITLE": "DigitalChief Ecom",
"OTP_SESSION_TTL": "session_ttl",
"OTP_SMS_AUTHOR_NAME": "sms_promo",
"OTP_SMS_ENABLED": "true",
"OTP_SMS_INTEGRATION": "blank",
"OTP_TTL": "ttl",
"OTP_VERIFICATION_TOKEN_ISSUER": "otp-verifier",
"OTP_VERIFICATION_TOKEN_PRIVATE_KEY": "открытый_ключ_otp",
"OTP_VERIFICATION_TOKEN_PUBLIC_KEY": "закрытый_ключ_otp",
"OTP_VERIFICATION_TOKEN_TTL": "token_ttl",
"TOTP_ALGORITHM": "sha1",
"TOTP_LENGTH": "8",
"TOTP_PERIOD": "30S",
"TOTP_PLATFORM_KEYS": "keys"
}
}
{
"env": {
"OTP_MESSAGE_AUTHOR_NAME": "имя_автора_сообщения",
"OTP_SENDER": "отправитель",
"OTP_SENDER_API_TOKEN": "api_токен_службы_отправителя",
"OTP_SENDER_URL": "url_службы_отправителя",
"POSTGRES_HOST": "хост_бд",
"POSTGRES_MIGRATION_PASSWORD": "пароль",
"POSTGRES_PASSWORD": "пароль_бд"
}
}
Методы микросервиса 
- Проверка кода верификации пользователя - POST запрос, /v1/verify-by-otp
phone
: параметр тела запроса, обязательный: номер телефона в формате +XXX(YYY)ZZZ, где XXX - код страны, YYY - код оператора, ZZZ - остальные цифры;otp
: параметр тела запроса, обязательный: 4-значный код OTP;usageType
: параметр тела запроса, обязательный: тип использования OTP. Принимает значениеauthorize
.
{
"phone": "+7(111)1111111",
"otp": "1111",
"usageType": "authorize"
}
{
"otpVerificationToken": {
"value": "otp-verification-token-value" //Сгенерированный токен
,"expiresAt": 1634025600 //Время, когда истекает токен (формат unix epoch seconds)
,"expiresIn": 600 //Время до истечения действия токена (в секундах)
},
"remainingVerifyOtpAttempts": 3 //Кол-во оставшихся попыток
,"verified": true //Флаг, указывающий на успешную (true) либо неуспешную (false) проверку OTP кода.
}
- 200 - операция выполнена успешно, получены данные о проверке кода верификации
- 400 - ошибка, невалидный запрос
- 500 - ошибка, Internal Server Error
- Отправка кода верификации пользователю - POST запрос, /v1/send-otp
phone
: параметр тела запроса, обязательный: номер телефона в формате +XXX(YYY)ZZZ, где XXX - код страны, YYY - код оператора, ZZZ - остальные цифры;sendType
: параметр тела запроса, обязательный: тип отправки OTP кода. Принимает значенияpush
илиsms
;usageType
: параметр тела запроса, обязательный: тип использования OTP. Принимает значениеauthorize
;pushProvider
: параметр тела запроса, обязательный: провайдер push-уведомлений.
{
"phone": "+7(111)1111111",
"sendType": "SMS",
"usageType": "AUTHORIZE",
"pushProvider": "FIREBASE"
}
{
"otpLength": 0 //Длина сгенерированного OTP-кода
,"nextAttemptTimestamp": 0 //Временная метка следующей попытки отправки OTP в формате UNIX
,"nextAttemptDelay": 0 //Задержка перед следующей попыткой отправки OTP в секундах
,"remainingVerifyOtpAttempts": 0 // Кол-во оставшихся попыток
}
- 200 - операция выполнена успешно, код верификации отправлен пользователю
- 400 - ошибка, неправильный запрос
- 500 - ошибка, Internal Server Error
- Проверка валидности выданного OTP токена - POST запрос, /v1/verify-otp-token
phone
: параметр тела запроса, обязательный: номер телефона в формате +XXX(YYY)ZZZ, где XXX - код страны, YYY - код оператора, ZZZ - остальные цифры;token
: параметр тела запроса, обязательный: токен для проверки;usageType
: параметр тела запроса, необязательный: цель использования токена. По умолчаниюundefined
.
{
"phone": "+7(111)1111111",
"token": "otp-verification-token-value",
"usageType": "AUTHORIZE"
}
{
"verified": true
}
- 200 - операция выполнена успешно, получены данные о проверке проверки валидности выданного OTP verification токена
- 400 - ошибка, неправильный запрос (не указано одно из обязательных полей)
- 500 - ошибка, Internal Server Error
- Ручная инвалидация локального кэша сервиса - POST запрос, /v1/cache/invalidate-all
Отсутствуют
Отсутствует
{
"timestamp": "string",
"status": 0,
"error": "string",
"code": "string",
"message": "string",
"payload": {},
"path": "string",
"validation": {
"errors": [
{
"codes": [
"string"
],
"arguments": [
{}
],
"defaultMessage": "string",
"objectName": "string",
"code": "string"
}
]
}
}
- 200 - успешная инвалидация локального кэша
- 500 - ошибка, Internal Server Error