Design for verify OTP
Problem statement:
As a sunbird system it should be able to do the verification of generated OTP.
Proposed Solution:
Sunbird will expose new api to verify OTP. Both Generate OTP and Verify OTP can be a single micro-service. New api structure will be as follow.
Verify OTP
URI: v1/user/otp/verify
Method: POST
Request body :
{
"request": {
"key":"either phone or email"
"type":"email/phone"
"otp": "otp value"
}
}
Response body:
{
{
"id": "api.user.otp.verify",
"ver": "v1",
"ts": "2018-11-21 08:55:04:708+0000",
"params": {
"resmsgid": null,
"msgid": "8e27cbf5-e299-43b0-bca7-8347f7e5abcf",
"err": null,
"status": "success",
"errmsg": null
},
"responseCode": "OK",
"result": {
}
}
// in case of failure it will have errmsg and responseCode will be failure code (client-error, server-error)
This api will do following checks:
- key should be either valid phone number format or email format.
- Incoming OTP should match with configured one (example: configured is alphanumeric but it's coming only as numeric, or configured is 5 digits but it's having only 4 or more than 5 digits)
- This email/phone should not be in blocked list (blocked for 24 hours or some configured time due to too many hits) - Design required , in case of blocked list where need to be store it
- OTP generation/verification need to generate api access telemetry.
Open points:
- Once OTP is verified , DO we need to removed it completely from DB or Do we need to hold for 24 hours , so that within 24 hours also he should not exceed limit.
, multiple selections available,