Пример #1
0
        private async void SignInButton_Click(object sender, EventArgs e)
        {
            try
            {
                if (!ValidateInputs())
                {
                    return;
                }

                var dto = new TokenRequestDto()
                {
                    Username = usernameEditText.Text,
                    Password = passwordEditText.Text
                };

                progressBar.Visibility = ViewStates.Visible;

                var tokenDto = await _authService.SignInAsync(dto);

                if (tokenDto != null && tokenDto.Token != null)
                {
                    SaveToken(tokenDto.Token);
                }

                progressBar.Visibility = ViewStates.Invisible;
            }
            catch (Exception ex)
            {
                progressBar.Visibility = ViewStates.Invisible;
                _dialogService.ShowError(this, ex);
            }
        }
Пример #2
0
        public async Task <TokenResponseDto> GetAccessTokenAsync(TokenRequestDto request)
        {
            var user = await _userManager.FindByNameAsync(request.UserName);

            if (user == null)
            {
                throw new AuthException(AuthErrors.InvalidCredentials);
            }

            if (!await _userManager.CheckPasswordAsync(user, request.Password))
            {
                throw new AuthException(AuthErrors.InvalidCredentials);
            }

            // generate refresh token
            var refreshToken = GenerateRefreshToken();

            user.AddRefreshToken(refreshToken);
            await _userManager.UpdateAsync(user);

            var roles = await _userManager.GetRolesAsync(user);

            return(new TokenResponseDto()
            {
                AccessToken = _jwtGenerator.GenerateJwtToken(user, roles.ToList()),
                RefreshToken = refreshToken
            });
        }
Пример #3
0
        public async Task <TokenResponse> CreateToken([FromBody] TokenRequestDto model)
        {
            // Validate user credentials and return token
            IActionResult response = Unauthorized();

            if (model == null)
            {
                throw new Exception("request details required");
            }

            if (string.IsNullOrEmpty(model.Username) || string.IsNullOrEmpty(model.Username))
            {
                throw new Exception("Incomplete credentials");
            }

            var result = await _identityService.GetUserAccountAsync(model);

            if (result.Status == AuthStatus.Authenticated)
            {
                // return Json(JwtSecurityTokenHelper.CreateToken(Configuration, result.UserDetails));
                return(JwtSecurityTokenHelper.CreateToken(Configuration, result.UserDetails));

                // return await ApiResponseResult(JwtSecurityTokenHelper.CreateToken(Configuration, result.UserDetails), "Token created");
            }

            return(new TokenResponse
            {
                Token = "",
                Status = System.Net.HttpStatusCode.OK,
                UserDetails = result.UserDetails
            });
        }
        public async Task CreateToken_WhenCalledWithValidArgs_ReturnsOkWithToken()
        {
            // Arrange
            var login = new TokenRequestDto()
            {
                Username = "******", Password = "******"
            };

            _mockSignInManager
            .Setup(m => m.PasswordSignInAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()))
            .ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Success);

            _mockUserManager.Setup(m => m.FindByNameAsync(It.IsAny <string>())).ReturnsAsync(_user);

            // Act
            var result = await _sut.CreateToken(login);

            // Assert
            var okResult = Assert.IsAssignableFrom <OkObjectResult>(result);
            var cResult  = Assert.IsAssignableFrom <TokenCreationResultDto>(okResult.Value);

            Assert.NotNull(cResult);
            Assert.NotNull(cResult.Token);
            Assert.NotNull(cResult.Token.Value);
        }
Пример #5
0
        public async Task <IActionResult> ValidateToken([FromBody] TokenRequestDto tokenRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new AuthResult()
                {
                    Success = false,
                    Errors = new List <string>()
                    {
                        "Invalid payload."
                    }
                }));
            }

            var result = await VerifyToken(tokenRequest);

            if (result is null)
            {
                return(BadRequest("Token is invalid."));
            }

            if (!result.Success)
            {
                return(BadRequest($"Token is invalid: {result.Errors.FirstOrDefault()}"));
            }

            return(Ok("Token is valid."));
        }
Пример #6
0
        public async Task <IActionResult> RefreshToken([FromBody] TokenRequestDto tokenRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new AuthResult()
                {
                    Success = false,
                    Errors = new List <string>()
                    {
                        "Invalid payload."
                    }
                }));
            }

            var result = await VerifyToken(tokenRequest, true);

            if (result is null)
            {
                return(BadRequest(new AuthResult()
                {
                    Success = false,
                    Errors = new List <string>()
                    {
                        "Invalid token."
                    }
                }));
            }

            return(Ok(result));
        }
        public async Task <IActionResult> Auth(TokenRequestDto tokenRequestDto)
        {
            switch (tokenRequestDto.GrantType)
            {
            case "password":
                var result = await _utilities.GenerateNewTokenAsync(tokenRequestDto);

                if (result.status)
                {
                    return(Ok(tokenRequestDto));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + result.message);
                    return(Unauthorized(result.message));
                }

            case "refresh_token":
                var res = await _utilities.RefreshAccessTokenAsync(tokenRequestDto);

                if (res.status)
                {
                    return(Ok(tokenRequestDto));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + res.message);
                    return(Unauthorized(res.message));
                }

            default:
                return(Unauthorized("خطا در اعتبار سنجی دوباره"));
            }
        }
Пример #8
0
 public async Task <ActionResult> Token([FromBody] TokenRequestDto request)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     return(Ok(
                await _authService.GetAccessTokenAsync(request)
                ));
 }
Пример #9
0
        public async Task <IActionResult> Auth([FromBody] TokenRequestDto tokenRequestDto)
        {
            if (tokenRequestDto == null)
            {
                return(new StatusCodeResult(500));
            }

            //return Ok("You're retarded c**t");
            return(await GetToken(tokenRequestDto));
        }
Пример #10
0
        public ActionResult <ExamplePartnerTokenDto> Token([FromForm] TokenRequestDto request)
        {
            var token = new ExamplePartnerTokenDto
            {
                CustomerAccountId      = "RandomAccountId",
                PartnerApiRefreshToken = "PartnerApiRefreshToken"
            };

            return(Ok(token));
        }
Пример #11
0
        private async void SignInButton_Click(object sender, EventArgs e)
        {
            try
            {
                if (!ValidateInputs())
                {
                    return;
                }

                var dto = new TokenRequestDto()
                {
                    Username = usernameEditText.Text.Trim(),
                    Password = passwordEditText.Text
                };

                _progressBarHelper.Show();

                var tokenCreationResultDto = await _authHelper.SignInAsync(dto);

                _progressBarHelper.Hide();

                if (tokenCreationResultDto != null)
                {
                    if (tokenCreationResultDto.Succeeded &&
                        tokenCreationResultDto.Token?.Value != null)
                    {
                        await Helpers.Utilities.InitUserAndDeviceInfoAsync(tokenCreationResultDto.Token);

                        await SyncService.Instance.SyncAsync();

                        StartActivity(typeof(TasksActivity));

                        FinishAffinity();

                        return;
                    }
                    else if (tokenCreationResultDto.ErrorType == TokenCreationErrorType.EmailNotConfirmed)
                    {
                        _dialogHelper.ShowError(this, "Email address not confirmed. Please confirm your email."
                                                , (o, ev) => ShowConfirmationCodeInputDialog(tokenCreationResultDto.ValidationData));

                        return;
                    }
                }

                _dialogHelper.ShowError(this, "Username or password is incorrect.");
            }
            catch (Exception ex)
            {
                Log.WriteLine(LogPriority.Error, "Planner Error", ex.Message);

                _progressBarHelper.Hide();
                _dialogHelper.ShowError(this, ex);
            }
        }
Пример #12
0
        public async Task <TokenResponseDto> RefreshAccessTokenAsync(TokenRequestDto tokenRequestDto)
        {
            string ip = _http.HttpContext.Connection != null
                    ? _http.HttpContext.Connection.RemoteIpAddress != null
                        ?
                        _http.HttpContext.Connection.RemoteIpAddress.ToString()
                        :
                        "noIp"
                    : "noIp";


            var refreshToken = await _db._TokenRepository.GetAsync(p =>
                                                                   p.ClientId == _tokenSetting.ClientId && p.Value == tokenRequestDto.RefreshToken &&
                                                                   p.Ip == ip
                                                                   );

            if (refreshToken == null)
            {
                return(new TokenResponseDto()
                {
                    status = false,
                    message = "خطا در اعتبار سنجی خودکار"
                });
            }
            if (refreshToken.ExpireTime < DateTime.Now)
            {
                return(new TokenResponseDto()
                {
                    status = false,
                    message = "خطا در اعتبار سنجی خودکار"
                });
            }

            var user = await _userManager.FindByIdAsync(refreshToken.UserId);

            if (user == null)
            {
                return(new TokenResponseDto()
                {
                    status = false,
                    message = "خطا در اعتبار سنجی خودکار"
                });
            }

            var response = await CreateAccessTokenAsync(user, refreshToken.Value);

            return(new TokenResponseDto()
            {
                status = true,
                token = response.token
            });
        }
        public async Task CreateToken_WhenCalledWithInvalidCreds_ReturnsBadRequest()
        {
            // Arrange
            var login = new TokenRequestDto();

            _mockSignInManager
            .Setup(m => m.PasswordSignInAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()))
            .ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Failed);

            // Act
            var result = await _sut.CreateToken(login);

            // Assert
            Assert.IsAssignableFrom <BadRequestObjectResult>(result);
        }
Пример #14
0
        public async Task <TokenResponseDto> GenerateNewTokenAsync(TokenRequestDto tokenRequestDto)
        {
            var user = await _userManager.FindByNameAsync(tokenRequestDto.UserName);

            if (user != null && await _userManager.CheckPasswordAsync(user, tokenRequestDto.Password))
            {
                //create new token
                var newRefreshToken = CreateRefreshToken(_tokenSetting.ClientId, user.Id, tokenRequestDto.IsRemember);
                //remove older tokens
                var oldRefreshToken = await _db.Tokens.Where(p => p.UserId == user.Id).ToListAsync();

                if (oldRefreshToken.Any())
                {
                    foreach (var ort in oldRefreshToken)
                    {
                        _db.Tokens.Remove(ort);
                    }
                }
                //add new refresh token to db
                _db.Tokens.Add(newRefreshToken);

                await _db.SaveChangesAsync();

                var accessToken = await CreateAccessTokenAsync(user, newRefreshToken.Value);

                return(new TokenResponseDto()
                {
                    token = accessToken.token,
                    refresh_token = accessToken.refresh_token,
                    status = true,
                    user = user
                });
            }
            else
            {
                return(new TokenResponseDto()
                {
                    status = false,
                    message = "کاربری با این یوزر و پس وجود ندارد"
                });
            }
        }
        public async Task CreateToken_WhenEmailNotConfirmed_ReturnsBadRequestWithUserId()
        {
            // Arrange
            var login = new TokenRequestDto();

            _mockSignInManager
            .Setup(m => m.PasswordSignInAsync(It.IsAny <ApplicationUser>(), It.IsAny <string>(), It.IsAny <bool>(), It.IsAny <bool>()))
            .ReturnsAsync(Microsoft.AspNetCore.Identity.SignInResult.Failed);

            _mockUserManager.Setup(m => m.FindByNameAsync(It.IsAny <string>())).ReturnsAsync(_userWithNotConfirmedEmail);

            // Act
            var result = await _sut.CreateToken(login);

            // Assert
            var brResult = Assert.IsAssignableFrom <BadRequestObjectResult>(result);
            var cResult  = Assert.IsAssignableFrom <TokenCreationResultDto>(brResult.Value);

            Assert.Equal(_userWithNotConfirmedEmail.Id, cResult.ValidationData);
        }
        public async Task <ActionResult <TokenResponseDto> > GenerateToken([FromQuery] TokenRequestDto request)
        {
            var user = await _mediator.Send(new GetLoginUserQuery(request.UserName, request.Password));

            if (user == null)
            {
                _logger.LogWarning("User is null");
                return(Ok(new TokenResponseDto(null, "")));
            }
            var refreshToken = _tokenFactory.GenerateToken();
            await _mediator.Publish(new UpdateUserRefreshTokenCommand(
                                        user.Id,
                                        refreshToken,
                                        Request.HttpContext.Connection.RemoteIpAddress?.ToString()));

            return(Ok(new TokenResponseDto(
                          await _jwtFactory.GenerateEncodedToken(user),
                          refreshToken,
                          true)));
        }
Пример #17
0
        public async Task <IActionResult> CreateToken([FromBody] TokenRequestDto login)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(TokenCreationResultDto.Failed(TokenCreationErrorType.InvalidUsernameOrPassword)));
                }

                var user = await _userManager.FindByNameAsync(login.Username);

                if (user != null)
                {
                    var result = await _signInManager.PasswordSignInAsync(user, login.Password, false, false);

                    if (result.Succeeded)
                    {
                        var tokenString = BuildToken(user);
                        return(Ok(TokenCreationResultDto.Success(new TokenDto()
                        {
                            Value = tokenString,
                            ApplicationUserId = user.Id,
                            Username = user.UserName,
                            Email = user.Email
                        })));
                    }

                    if (!user.EmailConfirmed)
                    {
                        return(BadRequest(TokenCreationResultDto.Failed(TokenCreationErrorType.EmailNotConfirmed, user.Id)));
                    }
                }

                return(BadRequest(TokenCreationResultDto.Failed(TokenCreationErrorType.InvalidUsernameOrPassword)));
            }
            catch (Exception ex)
            {
                _logger.LogError("Threw exception while creating Token: {@ex}", ex);
                return(StatusCode((int)HttpStatusCode.InternalServerError, TokenCreationResultDto.Failed(TokenCreationErrorType.ServerError)));
            }
        }
        public async Task <IActionResult> Login(TokenRequestDto tokenRequestDto)
        {
            switch (tokenRequestDto.GrantType)
            {
            case "password":
                var result = await _utilities.GenerateNewTokenAsync(tokenRequestDto);

                if (result.status)
                {
                    var userForReturn = _mapper.Map <UserForDetailedDto>(result.user);

                    return(Ok(new LoginResponseDto
                    {
                        token = result.token,
                        refresh_token = result.refresh_token,
                        user = userForReturn
                    }));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + result.message);
                    return(Unauthorized("1x111keyvanx11"));
                }

            case "refresh_token":
                var res = await _utilities.RefreshAccessTokenAsync(tokenRequestDto);

                if (res.status)
                {
                    return(Ok(res));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + res.message);
                    return(Unauthorized("0x000keyvanx00"));
                }

            default:
                return(Unauthorized("خطا در اعتبار سنجی دوباره"));
            }
        }
Пример #19
0
        private async Task <TokenResponseDto> GetManagementTokenAsync()
        {
            var tokenRequest = new TokenRequestDto()
            {
                ClientId     = _authOptions.ClientId,
                ClientSecret = _authOptions.ClientSecret,
                Audience     = new Uri(new Uri(_authOptions.Instance), "/api/v2/").ToString(),
                GrantType    = "client_credentials"
            };
            var tokenRequestJson = new StringContent(JsonConvert.SerializeObject(tokenRequest), Encoding.UTF8,
                                                     "application/json");

            using var httpResponse =
                      await _httpClient.PostAsync($"oauth/token", tokenRequestJson);

            var responseAsString = await httpResponse.Content.ReadAsStringAsync();

            var authToken = JsonConvert.DeserializeObject <TokenResponseDto>(responseAsString);

            return(authToken);
        }
        public virtual async Task <ActionResult <AccessToken> > Login([FromForm] TokenRequestDto login)
        {
            if (!login.grant_type.Equals("password", StringComparison.OrdinalIgnoreCase))
            {
                throw new Exception("OAuth flow is not correct.");
            }

            var user = _userService.FindByPhoneAsync(login.username)
                       ?? await _userService.FindByEmailAsync(login.username)
                       ?? await _userService.FindByNameAsync(login.username);


            if (user == null)
            {
                return(new NotFoundObjectResult("Wrong Username or password"));
            }


            var isValidUserData = await _userService.CheckPasswordAsync(user, login.password);

            if (!isValidUserData)
            {
                return(new NotFoundObjectResult("Wrong Username or password"));
            }


            var isActiveUser = await _userService.IsUserStatusConfirmedAsync(user);

            if (!isActiveUser)
            {
                return(new NotFoundObjectResult("User is not active"));
            }

            await _userService.UpdateSecurityStampAsync(user);

            var token = await _service.GenerateToken(user);

            return(token);
        }
Пример #21
0
        public async Task <IActionResult> RevokeToken([FromBody] TokenRequestDto tokenRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new AuthResult()
                {
                    Success = false,
                    Errors = new List <string>()
                    {
                        "Invalid payload."
                    }
                }));
            }

            var username = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            var user = await _userManager.FindByNameAsync(username);

            if (user is not null)
            {
                var token = await _context.RefreshTokens
                            .FirstOrDefaultAsync(x =>
                                                 x.UserId == user.Id &&
                                                 x.Token == tokenRequest.RefreshToken
                                                 );

                if (token is not null)
                {
                    token.IsRevoked = true;
                    await _context.SaveChangesAsync();

                    return(Ok());
                }
            }

            return(BadRequest());
        }
Пример #22
0
        public async Task <IActionResult> CreateToken(TokenRequestDto tokenRequestDto)
        {
            var token = await _tokenService.CreateTokenAsync(tokenRequestDto);

            return(Json(token));
        }
Пример #23
0
        /// <summary>
        /// Verifies the JWT token
        /// </summary>
        /// <returns>A new, valid token or reason of error.</returns>
        private async Task <AuthResult> VerifyToken(TokenRequestDto tokenRequest, bool refreshIfExpired = false)
        {
            var jwtTokenHandler    = new JwtSecurityTokenHandler();
            var storedRefreshToken = _context.RefreshTokens
                                     .AsNoTracking()
                                     .FirstOrDefault(x => x.Token == tokenRequest.RefreshToken);

            ClaimsPrincipal principal = null;

            try {
                // validate token
                principal = jwtTokenHandler.ValidateToken(tokenRequest.Token, _tokenParams, out var validatedToken);

                //////
                // everything until catch block happens if token is technically valid
                //////
                var jwtId = principal.Claims.SingleOrDefault(x => x.Type == JwtRegisteredClaimNames.Jti).Value;
                if (storedRefreshToken.JwtId != jwtId)
                {
                    return(new AuthResult()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Provided token doesn't match saved token."
                        }
                    });
                }

                // verify encryption
                if (validatedToken is JwtSecurityToken jwtSecurityToken)
                {
                    var hasCorrectAlgo = jwtSecurityToken.Header.Alg.Equals(SecurityAlgorithms.Aes256KeyWrap, StringComparison.InvariantCultureIgnoreCase);
                    var hasCorrectEncr = jwtSecurityToken.Header.Enc.Equals(SecurityAlgorithms.Aes256CbcHmacSha512, StringComparison.InvariantCultureIgnoreCase);

                    if (!hasCorrectAlgo || !hasCorrectEncr)
                    {
                        return(null);
                    }
                }

                if (storedRefreshToken.IsRevoked)
                {
                    return(new AuthResult()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Token has been revoked."
                        }
                    });
                }

                // still try to check if expired (exception isn't thrown sometimes?)
                var expirationDateTimestamp = long.Parse(principal.Claims.FirstOrDefault(x => x.Type == JwtRegisteredClaimNames.Exp).Value);
                var expirationDate          = UnixTimeStampToDateTime(expirationDateTimestamp);
                if (expirationDate > DateTime.UtcNow)
                {
                    throw new SecurityTokenExpiredException();
                }

                // everything went well - bounce back
                return(new AuthResult()
                {
                    Success = true,
                    Token = tokenRequest.Token,
                    RefreshToken = tokenRequest.RefreshToken
                });
            } catch (SecurityTokenExpiredException) {
                if (!refreshIfExpired)
                {
                    return(new AuthResult()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "Token expired."
                        }
                    });
                }

                // generate new token only if requested refresh token exists
                if (storedRefreshToken == null)
                {
                    return(new AuthResult()
                    {
                        Success = false,
                        Errors = new List <string>()
                        {
                            "No such refresh token exists."
                        }
                    });
                }

                storedRefreshToken.IsUsed = true;
                _context.RefreshTokens.Update(storedRefreshToken);
                await _context.SaveChangesAsync();

                var dbUser = await _userManager.FindByIdAsync(storedRefreshToken.UserId.ToString());

                string jwtId = "";
                if (principal is null)
                {
                    jwtId = jwtTokenHandler.ReadJwtToken(tokenRequest.Token).Id;
                }
                else
                {
                    jwtId = principal.Claims.SingleOrDefault(x => x.Type == JwtRegisteredClaimNames.Jti).Value;
                }
                return(await GenerateJwtTokenAsync(dbUser, tokenRequest.RefreshToken, jwtId));
            } catch (Exception ex) {
                _logger.LogError(ex.ToString());
                return(null);
            }
        }
Пример #24
0
        public Task <string> CreateTokenAsync(TokenRequestDto tokenRequestDto)
        {
            //todo(max): check public key; check if card credentials are valid (https://developer.visa.com/capabilities/pav/docs-how-to#section1)

            return(Task.FromResult("token"));
        }
Пример #25
0
        private async Task <IActionResult> GetToken(TokenRequestDto tokenRequestDto)
        {
            try {
                // Check if there's an user with the given email
                var user = await UserManager.FindByEmailAsync(tokenRequestDto.Email);

                // or username
                if (user == null)
                {
                    user = await UserManager.FindByNameAsync(tokenRequestDto.Email);
                }

                if (user == null ||
                    !await UserManager.CheckPasswordAsync(user, tokenRequestDto.Password))
                {
                    // User doesn't exists or password mismatch.
                    return(new UnauthorizedResult());
                }

                // Email and password matches. Create and return the JWT token.
                DateTime now = DateTime.UtcNow;

                // Add the registered claims for JWT.
                var claims = new List <Claim> {
                    new Claim(JwtRegisteredClaimNames.Sub, user.Id),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim(JwtRegisteredClaimNames.Iat, new DateTimeOffset(now).ToUnixTimeSeconds().ToString()),
                    new Claim("Username", user.UserName)
                    // TODO:
                    // Add additional claims here.
                };

                // Get user claims from database.
                var claimsFromDb = new List <Claim>(await UserManager.GetClaimsAsync(user));
                claims.AddRange(claimsFromDb);

                var tokenExpirationMins = Configuration.GetValue <int>("Auth:Jwt:TokenExpirationInMinutes");
                var issuerSigningKey    = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Auth:Jwt:Key"]));

                var token = new JwtSecurityToken(
                    issuer: Configuration["Auth:Jwt:Issuer"],
                    audience: Configuration["Auth:Jwt:Audience"],
                    claims: claims,
                    notBefore: now,
                    expires: now.Add(TimeSpan.FromMinutes(tokenExpirationMins)),
                    signingCredentials: new SigningCredentials(issuerSigningKey, SecurityAlgorithms.HmacSha256)
                    );
                var encodedToken = new JwtSecurityTokenHandler().WriteToken(token);

                // Build and return the response.
                var response = new TokenResponseDto()
                {
                    Token      = encodedToken,
                    Expiration = tokenExpirationMins
                };

                return(Ok(response));
            }
            catch {
                return(new UnauthorizedResult());
            }
        }
Пример #26
0
 public Task <TokenCreationResultDto> SignInAsync(TokenRequestDto loginDto)
 {
     return(_httpService.PostForResultAsync <TokenCreationResultDto>("Auth/CreateToken", loginDto, true));
 }
Пример #27
0
        public async Task <IActionResult> RevokeToken([FromBody][Required] TokenRequestDto model)
        {
            await SessionService.RevokeRefreshToken(model.Token, IpAddress());

            return(Ok());
        }
Пример #28
0
        /// <summary>
        /// Acquires a token from the details in the CCRepository. If Amount is greater than 0 a pre-auth will be placed for that amount.
        /// </summary>
        /// <param name="ccRepositoryToken">CCRepository Token GUID</param>
        /// <param name="currencyCode">Currency Code</param>
        /// <param name="orderReference">Order Reference</param>
        /// <param name="amount">Pre-Auth Value</param>
        /// <param name="channelShortName">Channel Short Name</param>
        /// <param name="shortName">Business Short Name</param>
        /// <returns>Success / Failure</returns>
        public bool GetToken(string ccRepositoryToken, string currencyCode, string orderReference, decimal amount, string channelShortName, string shortName)
        {
            Logger.LogInfo(string.Format("GetToken: CCRepositoryToken {0} | CurrencyCode {1} | OrderReference {2} | Amount {3} | ChannelShortName {4}", ccRepositoryToken, currencyCode, orderReference, amount, channelShortName));
            var request = new TokenRequestDto
                {
                    CCRepositoryToken = ccRepositoryToken,
                    CurrencyCode = currencyCode,
                    OrderReference = orderReference,
                    SourceEnum = SourceEnumDto.PMS,
                    Amount = amount,
                    ChannelShortName = channelShortName,
                    ShortName = shortName
                };

            var result = CallPostEndPoint<StatusResponseDto, TokenRequestDto>(GetTokenUrl, request);

            return result.IsSuccess;
        }
Пример #29
0
        public async Task <TokenResponseDto> GenerateNewTokenAsync(TokenRequestDto tokenRequestDto, bool needPassword)
        {
            if (needPassword)
            {
                var user = await _db._UserRepository.GetUserByUserNameAsync
                               (tokenRequestDto.UserName);

                if (user != null && await _userManager.CheckPasswordAsync(user, tokenRequestDto.Password))
                {
                    //create new token
                    var newRefreshToken = CreateRefreshToken(_tokenSetting.ClientId, user.Id, tokenRequestDto.IsRemember);
                    //remove older tokens
                    var oldRefreshToken = await _db._TokenRepository.GetManyAsync(p => p.UserId == user.Id);

                    if (oldRefreshToken.Any())
                    {
                        foreach (var ort in oldRefreshToken)
                        {
                            _db._TokenRepository.Delete(ort);
                        }
                    }
                    //add new refresh token to db
                    _db._TokenRepository.Insert(newRefreshToken);

                    _db.Save();

                    var accessToken = await CreateAccessTokenAsync(user, newRefreshToken.Value);

                    return(new TokenResponseDto()
                    {
                        token = accessToken.token,
                        refresh_token = accessToken.refresh_token,
                        status = true,
                        user = user
                    });
                }
                else
                {
                    return(new TokenResponseDto()
                    {
                        status = false,
                        message = "کاربری با این یوزر و پس وجود ندارد"
                    });
                }
            }
            else
            {
                var user = await _db._UserRepository.GetUserByUserNameAsync
                               (tokenRequestDto.UserName);

                if (user != null)
                {
                    //create new token
                    var newRefreshToken = CreateRefreshToken(_tokenSetting.ClientId, user.Id, tokenRequestDto.IsRemember);
                    //remove older tokens
                    var oldRefreshToken = await _db._TokenRepository.GetManyAsync(p => p.UserId == user.Id);

                    if (oldRefreshToken.Any())
                    {
                        foreach (var ort in oldRefreshToken)
                        {
                            _db._TokenRepository.Delete(ort);
                        }
                    }
                    //add new refresh token to db
                    _db._TokenRepository.Insert(newRefreshToken);

                    _db.Save();

                    var accessToken = await CreateAccessTokenAsync(user, newRefreshToken.Value);

                    return(new TokenResponseDto()
                    {
                        token = accessToken.token,
                        refresh_token = accessToken.refresh_token,
                        status = true,
                        //user = user
                    });
                }
                else
                {
                    return(new TokenResponseDto()
                    {
                        status = false,
                        message = "کاربری با این یوزر و پس وجود ندارد"
                    });
                }
            }
        }
Пример #30
0
        //[ProducesResponseType(typeof(ApiReturn<LoginResponseDto>), StatusCodes.Status201Created)]
        //[ProducesResponseType(typeof(ApiReturn<string>), StatusCodes.Status400BadRequest)]
        public async Task <IActionResult> Login(TokenRequestDto tokenRequestDto)
        {
            ApiReturn <LoginResponseDto> model = new ApiReturn <LoginResponseDto> {
                Status = true
            };

            switch (tokenRequestDto.GrantType)
            {
            case "password":
                var result = await _utilities.GenerateNewTokenAsync(tokenRequestDto, true);

                if (result.status)
                {
                    var userForReturn = _mapper.Map <UserForDetailedDto>(result.user);
                    //userForReturn.Provider = tokenRequestDto.Provider;
                    model.Message = "ورود با موفقیت انجام شد";
                    model.Result  = new LoginResponseDto
                    {
                        token         = result.token,
                        refresh_token = result.refresh_token,
                        user          = userForReturn
                    };

                    return(Ok(model));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + result.message);
                    errorModel.Message = "1x111keyvanx11";
                    return(Unauthorized(errorModel));
                }

            case "social":
                var socialresult = await _utilities.GenerateNewTokenAsync(tokenRequestDto, false);

                if (socialresult.status)
                {
                    //var userForReturn = _mapper.Map<UserForDetailedDto>(socialresult.user);
                    //userForReturn.Provider = tokenRequestDto.Provider;
                    model.Message = "ورود با رفرش توکن با موفقیت انجام شد";
                    model.Result  = new LoginResponseDto
                    {
                        token         = socialresult.token,
                        refresh_token = socialresult.refresh_token,
                        user          = _mapper.Map <UserForDetailedDto>(socialresult.user)
                    };
                    return(Ok(model));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + socialresult.message);
                    errorModel.Message = "1x111keyvanx11";
                    return(Unauthorized(errorModel));
                }

            case "refresh_token":
                var res = await _utilities.RefreshAccessTokenAsync(tokenRequestDto);

                if (res.status)
                {
                    model.Message = "ورود با رفرش توکن با موفقیت انجام شد";
                    model.Result  = new LoginResponseDto
                    {
                        token         = res.token,
                        refresh_token = res.refresh_token,
                        user          = _mapper.Map <UserForDetailedDto>(res.user)
                    };
                    return(Ok(model));
                }
                else
                {
                    _logger.LogWarning($"{tokenRequestDto.UserName} درخواست لاگین ناموفق داشته است" + "---" + res.message);
                    errorModel.Message = "0x000keyvanx00";
                    return(Unauthorized(errorModel));
                }

            default:
                errorModel.Message = "خطا در اعتبار سنجی";
                return(Unauthorized(errorModel));
            }
        }