예제 #1
0
        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);
        }
예제 #2
0
        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);
        }