Example #1
0
        public JwtTokenResponse CreateToken(Client model)
        {
            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, model.Login),
                new Claim(ClaimTypes.Name, model.FirstName + "," + model.LastName),
                new Claim(ClaimTypes.Role, "default")
            };
            var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtBearerConfig.Secret));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken
                        (
                "Advert",
                "Clients",
                claims,
                expires: DateTime.UtcNow.AddMinutes(10),
                signingCredentials: creds
                        );

            var result = new JwtTokenResponse
            {
                Token        = new JwtSecurityTokenHandler().WriteToken(token),
                RefreshToken = Guid.NewGuid().ToString()
            };

            return(result);
        }
Example #2
0
        public async Task <string> RefreshToken([FromBody] JwtTokenResponse token)
        {
            ApplicationUser user = await _userManager.FindByNameAsync(token.UserId);

            bool isSuper = token.UserId == _setting.GetSuperId();

            if (isSuper)
            {
                var newToken = Tools.GenerateJwtToken(_setting, token.UserId, token.Role, token.Refresh, isSuper, out string outRefreshToken);

                _responseMessage.Status = Status.MessageType.SUCCESS.ToString();
                _responseMessage.Result = newToken;
            }
            else
            {
                var currentRefresh = await _userManager.GetAuthenticationTokenAsync(user, Messages.COMPANYNAME, Messages.REFRESHTOKEN);

                if (token.Refresh == currentRefresh)
                {
                    var newToken = Tools.GenerateJwtToken(_setting, user.UserName, token.Role, currentRefresh, isSuper, out string outRefreshToken);

                    _responseMessage.Status = Status.MessageType.SUCCESS.ToString();
                    _responseMessage.Result = newToken;
                }
                else
                {
                    _responseMessage.Status = Status.MessageType.FAILED.ToString();
                    _responseMessage.Result = Messages.INVALIDTOKEN;
                }
            }


            return(Tools.ConvertToJSON(_responseMessage));
        }
Example #3
0
        public async Task <string> Logout([FromBody] JwtTokenResponse token)
        {
            ApplicationUser user = await _userManager.FindByNameAsync(User.Identity.Name);

            if (user == null && token.UserId == _setting.GetSuperId())
            {
                _responseMessage.Status = Status.MessageType.SUCCESS.ToString();
            }
            else
            {
                var currentRefresh = await _userManager.GetAuthenticationTokenAsync(user, Messages.COMPANYNAME, Messages.REFRESHTOKEN);

                if (token.Refresh == currentRefresh)
                {
                    var deletedToken = await _userManager.RemoveAuthenticationTokenAsync(user, Messages.COMPANYNAME, Messages.REFRESHTOKEN);

                    if (deletedToken.Succeeded)
                    {
                        _responseMessage.Status = Status.MessageType.SUCCESS.ToString();
                    }
                }
                else
                {
                    _responseMessage.Status = Status.MessageType.FAILED.ToString();
                    _responseMessage.Result = Messages.UNAUTHORIZED;
                }
            }


            return(Tools.ConvertToJSON(_responseMessage));
        }
Example #4
0
        public static string GenerateJwtToken(SettingLogic setting, string userName, string role, string originalRefreshToken, bool isSuper, out string outRefreshToken)
        {
            JwtTokenResponse obj = new JwtTokenResponse();

            try
            {
                int accessExpire  = Convert.ToInt32(setting.GetSettingValueInString("AccessExpire"));
                int refreshExpire = Convert.ToInt32(setting.GetSettingValueInString("RefreshExpire"));

                var accessToken = GenerateJwtToken(userName, DateTime.UtcNow.AddMinutes(accessExpire), Utils.Messages.ACCESS_KEY);
                JwtSecurityToken refreshToken = null;
                obj.Token = new JwtSecurityTokenHandler().WriteToken(accessToken);

                if (string.IsNullOrEmpty(originalRefreshToken))
                {
                    refreshToken = GenerateJwtToken(userName, DateTime.UtcNow.AddMinutes(refreshExpire), Utils.Messages.REFRESH_KEY);
                    obj.Refresh  = new JwtSecurityTokenHandler().WriteToken(refreshToken);
                }
                else
                {
                    obj.Refresh = originalRefreshToken;
                }

                obj.UserId = userName;

                obj.Role = (isSuper ? "SuperAdmin" : role);
            }
            catch (Exception ex)
            {
                _Logger.Error(ex);
            }
            outRefreshToken = obj.Refresh;

            return(ConvertToJSON(obj));
        }
        public virtual Task <HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            var payload = JwtTokenResponse.ConvertFromAuthorizationResponse(_response);

            var response = _request.CreateResponse(HttpStatusCode.OK, payload);

            return(Task.FromResult(response));
        }
        public JwtTokenResponse GetJWTToken(UserInformation userInformation)
        {
            JwtTokenResponse jwtTokenResponse = new JwtTokenResponse()
            {
                StatusCode = 200
            };

            if (userInformation == null)
            {
                jwtTokenResponse.StatusCode = 400;
                jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                {
                    new JwtValidation()
                    {
                        FieldName = nameof(userInformation),
                        Message   = nameof(userInformation) + " can't be blank."
                    }
                };
                return(jwtTokenResponse);
            }

            if (string.IsNullOrWhiteSpace(userInformation.CustomerName))
            {
                jwtTokenResponse.StatusCode = 400;
                jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                {
                    new JwtValidation()
                    {
                        FieldName = nameof(userInformation.CustomerName),
                        Message   = nameof(userInformation.CustomerName) + " can't be blank."
                    }
                };
                return(jwtTokenResponse);
            }

            if (userInformation.UserId <= 0)
            {
                jwtTokenResponse.StatusCode = 400;
                jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                {
                    new JwtValidation()
                    {
                        FieldName = nameof(userInformation.UserId),
                        Message   = nameof(userInformation.UserId) + " can't less then or equal to 0."
                    }
                };
                return(jwtTokenResponse);
            }

            Dictionary <string, string> claimList = new Dictionary <string, string>()
            {
                { "UserId", userInformation.UserId.ToString() },
                { "UserName", userInformation.CustomerName.ToString() }
            };

            jwtTokenResponse = _jwtBuilder.GetJWTToken(claimList, "Local Customer", null);
            return(jwtTokenResponse);
        }
        public async Task GetJwtToken_ShouldSucceed()
        {
            JwtTokenResponse response = await _fixture.ArangoDBClient.Auth.GetJwtTokenAsync(
                new JwtTokenRequestBody
            {
                Username = _fixture.Username,
                Password = _fixture.Password
            });

            Assert.NotNull(response.Jwt);
        }
Example #8
0
        public async Task <IActionResult> Token([FromBody] JwtTokenRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var identity = GenerateClaimsIdentity(request.Name, request.Name);
            var jwt      = new JwtTokenResponse
            {
                Id          = identity.Claims.Single(c => c.Type == Constants.UserIdClaimTypeName).Value,
                AccessToken = await GenerateEncodedToken(request.Name, identity),
                ExpiresIn   = (long)_jwtIssuerOptions.ValidFor.TotalSeconds
            };

            return(Ok(jwt));
        }
        public async Task GetJwtToken_ShouldReturnError_WhenWrongCredentialsUsed()
        {
            JwtTokenResponse jwtTokenResponse = await _fixture.ArangoDBClient.Auth.GetJwtTokenAsync(
                new JwtTokenRequestBody
            {
                Username = _fixture.Username,
                Password = "******"
            });

            Assert.False(jwtTokenResponse.IsSuccess);
            Assert.NotNull(jwtTokenResponse.ResponseDetails);
            Assert.True(jwtTokenResponse.ResponseDetails.Error);
            Assert.Equal(HttpStatusCode.Unauthorized, jwtTokenResponse.ResponseDetails.Code);
            Assert.Equal(401, jwtTokenResponse.ResponseDetails.ErrorNum);
            Assert.NotNull(jwtTokenResponse.ResponseDetails.ErrorMessage);
        }
Example #10
0
        /*
         *
         * /// <summary>
         * /// 刷新令牌
         * /// </summary>
         * /// <param name="token"></param>
         * /// <param name="refereshToken"></param>
         * public JwtTokenResponse RefershJwtToken(string token, string refereshToken)
         * {
         *  var validatedToken = GetPrincipalFromToken(token);
         *
         *  if (validatedToken == null)
         *  {
         *      return new JwtTokenResponse { Message = "Invalid Token" };
         *  }
         *
         *  var expiryDateUnix =
         *      long.Parse(validatedToken.Claims.Single(x => x.Type == JwtRegisteredClaimNames.Exp).Value);
         *
         *  var expiryDateTimeUtc = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
         *      .AddSeconds(expiryDateUnix);
         *
         *  if (expiryDateTimeUtc > DateTime.UtcNow)
         *  {
         *      return new JwtTokenResponse { Message = "This token hasn't expired yet" };
         *  }
         *
         *  var jti = validatedToken.Claims.Single(x => x.Type == JwtRegisteredClaimNames.Jti).Value;
         *
         *  var storedRefreshToken = await _context.RefreshTokens.SingleOrDefaultAsync(x => x.Token == refreshToken);
         *
         *  if (storedRefreshToken == null)
         *  {
         *      return new JwtTokenResponse { Message = "This refresh token does not exist" };
         *  }
         *
         *  if (DateTime.UtcNow > storedRefreshToken.ExpiryDate)
         *  {
         *      return new JwtTokenResponse { Message = "This refresh token has expired" };
         *  }
         *
         *  if (storedRefreshToken.Invalidated)
         *  {
         *      return new JwtTokenResponse { Message = "This refresh token has been invalidated" };
         *  }
         *
         *  if (storedRefreshToken.Used)
         *  {
         *      return new JwtTokenResponse { Message = "This refresh token has been used" };
         *  }
         *
         *  if (storedRefreshToken.JwtId != jti)
         *  {
         *      return new JwtTokenResponse { Message = "This refresh token does not match this JWT" };
         *  }
         *
         *  storedRefreshToken.Used = true;
         *  _context.RefreshTokens.Update(storedRefreshToken);
         *  await _context.SaveChangesAsync();
         *
         *  var user = await _userManager.FindByIdAsync(validatedToken.Claims.Single(x => x.Type == "id").Value);
         *  return await GenerateAuthenticationResultForUserAsync(user);
         * }
         *
         *
         * private ClaimsPrincipal GetPrincipalFromToken(string token)
         * {
         *  var tokenHandler = new JwtSecurityTokenHandler();
         *
         *  try
         *  {
         *      var tokenValidationParameters = _tokenValidationParameters.Clone();
         *      tokenValidationParameters.ValidateLifetime = false;
         *      var principal = tokenHandler.ValidateToken(token, tokenValidationParameters, out var validatedToken);
         *      if (!IsJwtWithValidSecurityAlgorithm(validatedToken))
         *      {
         *          return null;
         *      }
         *
         *      return principal;
         *  }
         *  catch
         *  {
         *      return null;
         *  }
         * }
         *
         * private bool IsJwtWithValidSecurityAlgorithm(SecurityToken validatedToken)
         * {
         *  return (validatedToken is JwtSecurityToken jwtSecurityToken) &&
         *         jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.HmacSha256,
         *             StringComparison.InvariantCultureIgnoreCase);
         * }
         *
         */
        #endregion

        /// <summary>
        /// 生成Jwt授权
        /// </summary>
        /// <param name="claims"></param>
        /// <returns></returns>
        public JwtTokenResponse JwtToken(List <Claim> claims)
        {
            //生成刷新令牌
            var refreshToken = GenerateHelper.GenerateRefreshToken();

            //添加刷新令牌
            claims.Add(new Claim(JwtRegisteredClaimNames.Jti, refreshToken));

            var key             = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(_config.Key));
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Issuer             = _config.Issuer,
                Audience           = _config.Audience,
                Expires            = DateTime.Now.AddSeconds(_config.Expiress),
                SigningCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256)
            };

            var jwtSecurityToken = new JwtSecurityTokenHandler();
            var securityToken    = jwtSecurityToken.CreateToken(tokenDescriptor);

            //保存刷新令牌

            /*
             *
             * Refresh_Token refresh_Token = new Refresh_Token
             * {
             *  JwtId = securityToken.Id,
             *  Token = refreshToken,
             *  Customer_Id = user.Id,
             *  ExpiryDate = DateTime.Now.AddMinutes(5)
             * };
             * await _refreshTokenRepository.AddAsync(refresh_Token);
             *
             */

            var response = new JwtTokenResponse();

            response.AuthToken     = jwtSecurityToken.WriteToken(securityToken);
            response.ExpiressIn    = _config.Expiress;
            response.TokenType     = "Bearer";
            response.RefereshToken = refreshToken;

            return(response);
        }
        public async Task LoginAsync_ShouldReturnNull_WhenSaveAsyncFails()
        {
            // Arrange
            var clientToLogin = new ClientLoginRequest
            {
                Login    = "******",
                Password = "******"
            };
            var client   = new Client();
            var jwtToken = new JwtTokenResponse {
                Token = "token", RefreshToken = "refreshToken"
            };

            _clientRepository.FindByLoginAsync(Arg.Any <string>()).Returns(client);
            _passwordHasher.Validate(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <string>()).Returns(true);
            _jwtBearer.CreateToken(client).Returns(jwtToken);
            _clientRepository.SaveAsync().Returns(0);
            // Act
            var token = await _sut.LoginAsync(clientToLogin);

            // Assert
            token.Should().BeNull();
        }
        public LoginFormResponse AuthenticateUser(LoginForm loginForm)
        {
            LoginFormResponse loginFormResponse = new LoginFormResponse()
            {
                StatusCode = 200
            };

            try
            {
                if (loginForm == null)
                {
                    loginFormResponse.StatusCode = 400;
                    loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                    {
                        new LoginValidationResponse()
                        {
                            Code    = 1001,
                            Message = "Request Object can't be blank."
                        }
                    };
                    return(loginFormResponse);
                }

                if (string.IsNullOrWhiteSpace(loginForm.UserName))
                {
                    loginFormResponse.StatusCode = 400;
                    loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                    {
                        new LoginValidationResponse()
                        {
                            Code    = 1001,
                            Message = "UserName can't be blank."
                        }
                    };
                    return(loginFormResponse);
                }

                if (string.IsNullOrWhiteSpace(loginForm.Password))
                {
                    loginFormResponse.StatusCode = 400;
                    loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                    {
                        new LoginValidationResponse()
                        {
                            Code    = 1001,
                            Message = "Password can't be blank."
                        }
                    };
                    return(loginFormResponse);
                }

                if (!Regex.IsMatch(loginForm.UserName, RegexPattern.mobile_number_validation_Patterns.GetCombinedPattern()))
                {
                    loginFormResponse.StatusCode = 400;
                    loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                    {
                        new LoginValidationResponse()
                        {
                            Code      = 1001,
                            FieldName = nameof(loginForm.UserName),
                            Message   = nameof(loginForm.UserName) + " should be valid. Format -: xxxxxxxxxx "
                        }
                    };
                    return(loginFormResponse);
                }

                UserInformation userInformation = _userLayer.GetUserDetail(loginForm);
                if (userInformation != null)
                {
                    JwtTokenResponse jwtTokenResponse = GetJWTToken(userInformation);
                    if (jwtTokenResponse.StatusCode == 200)
                    {
                        JwtToken tokenDetail = jwtTokenResponse.TokenDetail;
                        loginFormResponse.StatusCode      = 200;
                        loginFormResponse.Response        = new LoginResponse();
                        loginFormResponse.Response.UserId = userInformation.UserId;
                        if (tokenDetail != null)
                        {
                            loginFormResponse.Response.TokenDetail = new Token()
                            {
                                Type      = tokenDetail.Type,
                                Value     = tokenDetail.Value,
                                CreatedAt = tokenDetail.CreatedAt,
                                ExpiredAt = tokenDetail.ExpiredAt
                            };
                        }
                    }
                    else
                    {
                        loginFormResponse.StatusCode = 400;
                        loginFormResponse.ErrorList  = jwtTokenResponse
                                                       .ErrorList
                                                       .Select(x => new LoginValidationResponse()
                        {
                            FieldName = x.FieldName,
                            Message   = x.Message,
                            Code      = x.Code
                        }).ToList();
                    }
                }
                else
                {
                    loginFormResponse.StatusCode = 400;
                    loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                    {
                        new LoginValidationResponse()
                        {
                            Code    = 1001,
                            Message = "User Not Found"
                        }
                    };
                }
            }
            catch (Exception ex)
            {
                loginFormResponse.StatusCode = 400;
                loginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = "User Authentication Failed" + ex.Message
                    }
                };
            }
            return(loginFormResponse);
        }
Example #13
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="jwtToken"></param>
 /// <param name="user"></param>
 public WeChatLiteAppLoginResponse(JwtTokenResponse jwtToken, CustomerResponse user)
 {
     JwtToken = jwtToken;
     User     = user;
 }
        public JwtTokenResponse GetJWTToken(Dictionary <string, string> claims, string audience = null, DateTime?expires = null)
        {
            DateTime         issuedAt         = DateTime.UtcNow;
            JwtTokenResponse jwtTokenResponse = new JwtTokenResponse()
            {
                StatusCode = 200
            };

            try
            {
                if (claims == null ||
                    claims.Count == 0)
                {
                    jwtTokenResponse.StatusCode = 400;
                    jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                    {
                        new JwtValidation()
                        {
                            FieldName = nameof(claims),
                            Message   = "Claims can't be blank"
                        }
                    };
                    return(jwtTokenResponse);
                }

                if (string.IsNullOrWhiteSpace(audience))
                {
                    jwtTokenResponse.StatusCode = 400;
                    jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                    {
                        new JwtValidation()
                        {
                            FieldName = nameof(audience),
                            Message   = "audience can't be blank"
                        }
                    };
                    return(jwtTokenResponse);
                }

                if (expires != null && expires < issuedAt)
                {
                    jwtTokenResponse.StatusCode = 400;
                    jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                    {
                        new JwtValidation()
                        {
                            FieldName = nameof(audience),
                            Message   = "expires time should be greater then current utc time"
                        }
                    };
                    return(jwtTokenResponse);
                }

                string JwtToken = GenerateToken(claims, audience, expires, issuedAt);

                if (string.IsNullOrWhiteSpace(JwtToken))
                {
                    jwtTokenResponse.StatusCode = 400;
                    jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                    {
                        new JwtValidation()
                        {
                            Message = "Error while generating token"
                        }
                    };
                }
                else
                {
                    jwtTokenResponse.StatusCode  = 200;
                    jwtTokenResponse.ErrorList   = null;
                    jwtTokenResponse.TokenDetail = new JwtToken()
                    {
                        Type      = "Bearer",
                        Value     = JwtToken,
                        CreatedAt = DateTime.UtcNow,
                        ExpiredAt = expires
                    };
                }
            }
            catch (Exception ex)
            {
                jwtTokenResponse.StatusCode = 400;
                jwtTokenResponse.ErrorList  = new List <JwtValidation>()
                {
                    new JwtValidation()
                    {
                        Message = "Error while generating token -: " + ex.Message
                    }
                };
            }
            return(jwtTokenResponse);
        }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="jwtToken"></param>
 /// <param name="user"></param>
 public AdminLoginResponse(JwtTokenResponse jwtToken, AdminUserResponse user)
 {
     JwtToken = jwtToken;
     User     = user;
 }
Example #16
0
 public static bool IsEmptyToken(this JwtTokenResponse tokenResponse) => string.IsNullOrEmpty(tokenResponse.AccessToken);
        public LoginFormResponse AuthenticateUserByMobileNumber(OtpLoginForm otpLoginForm)
        {
            LoginFormResponse otpLoginFormResponse = new LoginFormResponse()
            {
                StatusCode = 200
            };

            if (otpLoginForm == null)
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = "Request Object can't be blank."
                    }
                };
                return(otpLoginFormResponse);
            }

            if (string.IsNullOrWhiteSpace(otpLoginForm.MobileNumber))
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = "MobileNumber can't be blank."
                    }
                };
                return(otpLoginFormResponse);
            }

            if (string.IsNullOrWhiteSpace(otpLoginForm.Otp))
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = "Otp can't be blank."
                    }
                };
                return(otpLoginFormResponse);
            }

            if (otpLoginForm.CountryCode <= 0)
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = "CountryCode can't be blank."
                    }
                };
                return(otpLoginFormResponse);
            }

            if (!Regex.IsMatch(otpLoginForm.MobileNumber, RegexPattern.mobile_number_validation_Patterns.GetCombinedPattern()))
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code      = 1001,
                        FieldName = nameof(otpLoginForm.MobileNumber),
                        Message   = nameof(otpLoginForm.MobileNumber) + " should be valid. Format -: xxxxxxxxxx "
                    }
                };
                return(otpLoginFormResponse);
            }

            bool isMobileNumberExist = _userLayer.isExistPhoneNumber(otpLoginForm.MobileNumber);

            if (isMobileNumberExist)
            {
                SmsApiResponse smsApiResponse = _smsBiz.VerifyOtpSms(new VerifyOtpRequest()
                {
                    Mobile      = otpLoginForm.MobileNumber,
                    Otp         = otpLoginForm.Otp,
                    CountryCode = otpLoginForm.CountryCode
                });

                if (smsApiResponse.StatusCode == 200)
                {
                    UserInformation userInformation = _userLayer.GetUserDetailByMobileNumber(otpLoginForm.MobileNumber);
                    if (userInformation != null)
                    {
                        JwtTokenResponse jwtTokenResponse = GetJWTToken(userInformation);
                        if (jwtTokenResponse.StatusCode == 200)
                        {
                            JwtToken tokenDetail = jwtTokenResponse.TokenDetail;
                            otpLoginFormResponse.StatusCode      = 200;
                            otpLoginFormResponse.Response        = new LoginResponse();
                            otpLoginFormResponse.Response.UserId = userInformation.UserId;
                            if (tokenDetail != null)
                            {
                                otpLoginFormResponse.Response.TokenDetail = new Token()
                                {
                                    Type      = tokenDetail.Type,
                                    Value     = tokenDetail.Value,
                                    CreatedAt = tokenDetail.CreatedAt,
                                    ExpiredAt = tokenDetail.ExpiredAt
                                };
                            }
                        }
                        else
                        {
                            otpLoginFormResponse.StatusCode = 400;
                            otpLoginFormResponse.ErrorList  = jwtTokenResponse
                                                              .ErrorList
                                                              .Select(x => new LoginValidationResponse()
                            {
                                FieldName = x.FieldName,
                                Message   = x.Message,
                                Code      = x.Code
                            }).ToList();
                        }
                    }
                }
                else
                {
                    otpLoginFormResponse.StatusCode = 400;
                    otpLoginFormResponse.ErrorList  = smsApiResponse.ErrorList.Select(x => new LoginValidationResponse()
                    {
                        Code    = x.Code,
                        Message = x.Message
                    }).ToList();
                }
            }
            else
            {
                otpLoginFormResponse.StatusCode = 400;
                otpLoginFormResponse.ErrorList  = new List <LoginValidationResponse>()
                {
                    new LoginValidationResponse()
                    {
                        Code    = 1001,
                        Message = nameof(otpLoginForm.MobileNumber) + " not found."
                    }
                };
            }

            return(otpLoginFormResponse);
        }