Beispiel #1
0
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenRequestModel requestModel)
        {
            var username = GetPrincipalFromExpiredToken(requestModel.OldAccessToken).Identity.Name;

            var user = await _userRepository.GetUserByLogin(username);

            var savedRefreshToken = _libraryContext.RefreshTokens
                                    .Where(x => x.User.Login == username && x.Token == requestModel.OldRefreshToken)
                                    .Select(x => x.Token)
                                    .FirstOrDefault();

            if (savedRefreshToken != requestModel.OldRefreshToken)
            {
                throw new SecurityTokenException("Invalid refresh token");
            }

            _logger.LogInformation($"Attempt to refresh token for user {username} at {DateTime.Now}");
            await _tokenRepository.DeleteAsync(_tokenRepository.GetAll().
                                               Where(p => p.Token == requestModel.OldRefreshToken && p.UserId == user.Id)
                                               .Select(p => p.Id)
                                               .FirstOrDefault());

            _logger.LogInformation($"{username} was updated in database at {DateTime.Now} with new refresh-token");
            return(await Token(username));
        }
Beispiel #2
0
        public async Task RefreshToken_ReturnsTokenInfo()
        {
            if (!File.Exists(TokenSettingFilePath))
            {
                await GetToken_ReturnsTokenInfo();
            }

            var content       = File.ReadAllText(TokenSettingFilePath);
            var tokenSettings = JsonConvert.DeserializeObject <TokenSettings>(content);

            var requestModel = new RefreshTokenRequestModel()
            {
                RefreshToken = tokenSettings.RefreshToken,
            };

            TokenResponseModel result = await ApiFactory.CreateAuthClient()
                                        .RefreshToken(requestModel)
                                        .Retry(3, TimeSpan.FromSeconds(2))
                                        .WhenCatch <HttpStatusFailureException>(ex => ex.StatusCode == System.Net.HttpStatusCode.RequestTimeout);

            Assert.NotNull(result);
            Assert.NotEmpty(result.AccessToken);

            WriteTokenSettings(result);
        }
Beispiel #3
0
        public async Task <TokenResponseModel> RefreshTokenAsync(RefreshTokenRequestModel tokenRequestModel)
        {
            string accessToken  = tokenRequestModel.AccessToken;
            string refreshToken = tokenRequestModel.RefreshToken;

            var principal = GetPrincipalFromExpiredToken(accessToken);
            var username  = principal.Identity.Name; //this is mapped to the Name claim by default

            var user = await _userRepository.FirstOrDefault(u => u.Username == username);

            if (user is null || user.RefreshToken != refreshToken || user.RefreshTokenExpiryTime <= DateTime.UtcNow)
            {
                return(null);
            }

            var newAccessToken  = GenerateAccessToken(principal.Claims);
            var newRefreshToken = GenerateRefreshToken();

            user.RefreshToken = newRefreshToken;

            await _userRepository.UpdateAsync(user);

            return(new TokenResponseModel()
            {
                AccessToken = newAccessToken,
                RefreshToken = newRefreshToken
            });
        }
Beispiel #4
0
        public ResultInfo <AuthResponseModel> RefreshToken([FromBody] RefreshTokenRequestModel model)
        {
            var data = _authHelper.RefreshToken(model);

            return(new ResultInfo <AuthResponseModel>
            {
                Code = ResponseResult.Success.Code.CodeString,
                Data = data
            });
        }
Beispiel #5
0
 public async Task <IActionResult> Logout([FromBody] RefreshTokenRequestModel tokens)
 {
     try
     {
         await _tokenRepository.DeleteAsync(await _tokenRepository.GetAll().Where(p => p.Token == tokens.OldRefreshToken).Select(p => p.Id).FirstOrDefaultAsync());
     }
     catch (Exception ex)
     {
         return(BadRequest(ex.Message.ToString()));
     }
     return(Ok());
 }
Beispiel #6
0
 public IActionResult RefreshAccessToken([FromBody] RefreshTokenRequestModel tokenRequest)
 {
     try
     {
         var refreshedTokens = _tokenHandlerService.RefreshAccessToken(tokenRequest.Token);
         return(Ok(refreshedTokens));
     }
     catch (Exception e)
     {
         return(NotFound(e));
     }
 }
Beispiel #7
0
        public async Task <JwtTokenManagerResponse> RefreshTokenAsync(RefreshTokenRequestModel refreshToken, Claim[] claims, string provider = "ApplicationProvider", string purpose = "RefreshToken")
        {
            if (refreshToken == null)
            {
                return(null);
            }

            ClaimsPrincipal validatedToken = GetPrincipalFromToken(refreshToken.AccessToken);

            if (validatedToken == null)
            {
                return(null);
            }

            string userEmail = validatedToken.Claims.FirstOrDefault(x => x.Type == "Email").Value;

            User userDetails = await _userManager.FindByEmailAsync(userEmail);

            if (userDetails == null)
            {
                return(null);
            }

            bool validateRefreshToken = await _userManager.VerifyUserTokenAsync(userDetails, provider, purpose, refreshToken.RefreshToken);

            if (!validateRefreshToken)
            {
                return(null);
            }

            string newRefreshToken = await GenerateRefreshToken(userDetails, provider, purpose);

            if (newRefreshToken == null)
            {
                return(null);
            }

            string newAccessToken = GenerateAccessToken(claims);

            if (newAccessToken == null)
            {
                return(null);
            }

            return(new JwtTokenManagerResponse
            {
                AccessToken = newAccessToken,
                RefreshToken = newRefreshToken
            });
        }
        public ActionResult RefreshToken([FromBody] RefreshTokenRequestModel model)
        {
            if (model == null)
            {
                throw new ArgumentNullException(nameof(model));
            }
            if (model.RefreshToken == null)
            {
                throw new UnauthorizedAccessException();
            }

            var newToken = _authService.RefreshToken(model.RefreshToken);

            return(Ok(newToken));
        }
        public async Task <ActionResult> RefreshAsync(RefreshTokenRequestModel tokenApiModel)
        {
            if (tokenApiModel is null)
            {
                return(BadRequest("Invalid client request"));
            }

            var tokenApiResponseModel = await _tokenService.RefreshTokenAsync(tokenApiModel);

            if (tokenApiResponseModel is null)
            {
                return(BadRequest("Invalid client request"));
            }

            return(Ok(tokenApiResponseModel));
        }
        public AuthResponseModel RefreshToken(RefreshTokenRequestModel model)
        {
            var token = TokenHelper.GetPayloadByJwtToken <RefreshTokenModel>(model.RefreshToken);
            var user  = CacheStoreHelper[CommonConstants.RefreshTokenPrefix + model.RefreshToken];

            if (user == null)
            {
                throw new RefreshTokenWrong();
            }
            CacheStoreHelper.Remove(token.model.RefreshToken);
            CacheStoreHelper.Remove(token.model.AccessToken);
            var session   = CreateSession(user.UserId, user.Groups);
            var userModel = UserRepository.GetById(user.UserId);

            if (userModel == null)
            {
                throw new CredentialWrong();
            }
            if (!userModel.IsActive)
            {
                throw new AcccountDeactivatedException();
            }
            //var groups = GroupRepository.GetGroupsByUserId(userModel.Id).ToArray();
            return(new AuthResponseModel
            {
                AccessToken = session.AccessToken,
                AccessTokenExpire = session.ExpirationTime,
                RefreshToken = session.RefreshToken,
                AuthInfo = new UserInfoModel
                {
                    DisplayName = $"{userModel.LastName} {userModel.FirstName}",
                    UserId = userModel.Id,
                    Permissions = new List <string>(), // ToDo change

                    /*Email = userModel.Email,
                     * AvatarId = userModel.PhotoId,
                     * FirstName = userModel.FirstName,
                     * LastName = userModel.LastName,*/
                    //TimestampOfBirth = userModel.BirthDate.UnixDateTime(),
                    //Groups = groups.Select(t => new GroupInfoModel
                    //{
                    //    Id = t.Id,
                    //    Name = t.Name
                    //})
                }
            });
        }
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenRequestModel model)
        {
            var authResponse = await _userService.RefreshTokenAsync(model.Token, model.RefreshToken);

            if (!authResponse.Success)
            {
                return(BadRequest(authResponse.Message));
            }

            var successfulAuthResult = new Models.Transfer.UserLoginResponseModel
            {
                Token        = authResponse.Token,
                RefreshToken = authResponse.RefreshToken
            };

            return(Ok(successfulAuthResult));
        }
Beispiel #12
0
        public async Task <JwtManagerResponse> RefreshTokenAsync(RefreshTokenRequestModel refreshTokenRequest)
        {
            if (refreshTokenRequest == null)
            {
                throw new EShopperException("Please provide required information!");
            }

            var validatedToken = GetPrincipalFromToken(refreshTokenRequest.AccessToken);

            if (validatedToken == null)
            {
                throw new EShopperException("Invalid Access Token!");
            }

            string userEmail = validatedToken.Claims.FirstOrDefault(x => x.Type == UserClaimsType.Email).Value;

            var userDetails = await _eShopperUserManager.FindByEmailAsync(userEmail);

            if (userDetails == null)
            {
                throw new EShopperException("User not found!");
            }

            var validateRefreshToken = await _eShopperUserManager.VerifyUserTokenAsync(userDetails, "EShopperAuthentication", "RefreshToken", refreshTokenRequest.RefreshToken);

            if (!validateRefreshToken)
            {
                // Invalid Refresh Token!
                throw new EShopperException("This refresh token is invalid!");
            }

            var newClaims = await GenerateClaims(userDetails);

            var newRefreshToken = await GenerateRefreshToken(userDetails, "EShopperAuthentication");

            var newAccessToken = GenerateToken(newClaims);

            return(new JwtManagerResponse
            {
                AccessToken = newAccessToken,
                RefreshToken = newRefreshToken
            });
        }
Beispiel #13
0
        private async Task <string> RefreshTokenAsync <T>() where T : IAccessModel
        {
            var refreshToken = await _localStorage.GetItemAsync <string>(LocalStorageKey.RefreshToken.ToString());

            if (string.IsNullOrWhiteSpace(refreshToken))
            {
                throw new ApplicationException("Something went wrong during the refresh token action");
            }
            var deviceId = await _localStorage.GetItemAsync <string>(LocalStorageKey.DeviceId.ToString());

            if (string.IsNullOrWhiteSpace(deviceId))
            {
                throw new ApplicationException("Something went wrong during the refresh token action");
            }

            var requestModel = new RefreshTokenRequestModel()
            {
                Token      = refreshToken,
                ClientType = ClientType.Web,
                DeviceId   = deviceId
            };

            var result = await _requestSenderService
                         .SendAsync <ApiResponse <T> >(HttpMethod.Post, "https://dev-auth.op.today/v1/identity/login/refresh", requestModel);

            if (!result.Success)
            {
                throw new ApplicationException("Something went wrong during the refresh token action");
            }

            var authToken = result.Data.GetAuthToken();

            await _localStorage.SetItemAsync(LocalStorageKey.AuthToken.ToString(), authToken);

            await _localStorage.SetItemAsync(LocalStorageKey.RefreshToken.ToString(), result.Data.GetRefreshToken());

            _requestSenderService.Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", authToken);
            _authStateProvider.NotifyUserAuthentication(result.Data.GetAuthToken());

            return(authToken);
        }
Beispiel #14
0
        public async Task <IActionResult> Refresh([FromBody] RefreshTokenRequestModel request)
        {
            var authResponse = await _identityService.RefreshTokenAsync(request.authToken, request.RefreshToken);

            if (!authResponse.Success)
            {
                if (authResponse.Errors.FirstOrDefault(w => w.Contains("This token hasn't expired yet")) != null)
                {
                    return(NoContent());
                }
                return(Unauthorized(new ErrorResponseModel(authResponse.Errors)));
            }

            await DeactivateCurrentTokenAsync();

            return(Ok(new AuthSuccessResponseModel
            {
                authToken = authResponse.AuthToken,
                refreshToken = authResponse.RefreshToken
            }));
        }
Beispiel #15
0
 public async Task <GenericResult <LoginResponseModel> > AuthenticateWithRefreshToken(RefreshTokenRequestModel model)
 {
     throw new System.NotImplementedException();
 }
        public async Task <GenericResult <LoginResponseModel> > RefreshToken([FromBody] RefreshTokenRequestModel model)
        {
            var response = await _authenticationService.AuthenticateWithRefreshToken(model);

            return(response);
        }
Beispiel #17
0
 /// <summary>
 /// 刷新token <see cref="IAuthContract.RefreshToken"/>
 /// </summary>
 /// <param name="requestModel"></param>
 /// <param name="timeout"></param>
 /// <param name="cancellationToken"></param>
 /// <returns></returns>
 public ITask <TokenResponseModel> RefreshToken(
     RefreshTokenRequestModel requestModel,
     TimeSpan?timeout = null, CancellationToken cancellationToken = default)
 {
     return(AuthContract.RefreshToken(requestModel, timeout, cancellationToken));
 }
        public async Task <IActionResult> RefreshToken([FromBody] RefreshTokenRequestModel model)
        {
            var response = await _accountService.RefreshTokenAsync(model.RefreshToken);

            return(Json(new JsonResponse <TokenResponseModel>(response)));
        }