public async Task <UserRefreshToken> GetExistingRefreshToken(string existingRefreshToken) { if (string.IsNullOrEmpty(existingRefreshToken)) { return(null); } UserRefreshToken userRefreshToken = await _refreshTokenRepository.GetRefreshToken(existingRefreshToken); if (userRefreshToken != null) { var expireDate = userRefreshToken.CreationDate.AddDays(_jwtSettings.RefreshTokenExpiresDays); if (expireDate > DateTime.UtcNow) { try { ClaimsPrincipal principal = _tokenHandler.ValidateToken(userRefreshToken.JwtToken, _tokenValidationParameters, out SecurityToken securityToken); if (principal != null && securityToken != null) { return(userRefreshToken); } } catch (Exception e) { return(null); } } } return(null); }
public async Task GetRefreshToken_should_get_from_existing_jwt_token() { // given string existingRefreshToken = "a fake GUID"; var expectedToken = new UserRefreshToken() { Email = "test@localhost", CreationDate = DateTime.UtcNow.AddDays(-1), IpAddress = "1.0.0.0", JwtToken = "jwt token", RefreshToken = existingRefreshToken }; _refreshTokenRepository .GetRefreshToken(existingRefreshToken) .Returns(expectedToken); _tokenHandler .ValidateToken(expectedToken.JwtToken, _jwtTokenValidationParameters, out Arg.Any <SecurityToken>()) .Returns(x => { var adminClaim = new Claim(ClaimTypes.Role, AdminRoleDefinition.Name); var claimsList = new List <Claim>() { adminClaim }; var fakeJwtSecurityToken = new JwtSecurityToken(claims: claimsList); x[2] = fakeJwtSecurityToken; // set the out (3rd parameter) of ValidateToken() return(new ClaimsPrincipal()); }); // when var userRefreshToken = await _service.GetExistingRefreshToken(existingRefreshToken); // then userRefreshToken.ShouldNotBeNull(); userRefreshToken.Email.ShouldBe(expectedToken.Email); }