Пример #1
0
        public void AcquireEmailConfirmationToken_ForInvalidInput_ReturnsNull()
        {
            var parser = new JwtParser();

            AcquireTokenModel tokenModel = parser.AcquireEmailConfirmationToken(null, 0);

            Assert.Null(tokenModel);
        }
Пример #2
0
        public void AcquireEmailConfirmationToken_ForValidInput_ReturnsCorrectToken()
        {
            var parser = new JwtParser();

            AcquireTokenModel tokenModel = parser.AcquireEmailConfirmationToken("*****@*****.**", 1);

            Assert.NotNull(tokenModel.Token);
        }
Пример #3
0
        public void Verify_ForFreshToken_ReturnsOk()
        {
            var parser = new JwtParser();
            AcquireTokenModel tokenModel = parser.AcquireToken("*****@*****.**", 1);

            VerifyResultModel result = parser.Verify(tokenModel.Token);

            Assert.Equal(true, result.IsValid);
            Assert.NotNull(result.ExpiryDate);
        }
Пример #4
0
        public void AcquireEmailConfirmationToken_VerifyForTokenParametersData()
        {
            var parser = new JwtParser();
            AcquireTokenModel tokenModel = parser.AcquireEmailConfirmationToken("*****@*****.**", 1);

            var handler = new JwtSecurityTokenHandler();
            var param   = parser.GetParameters();
            JwtSecurityToken readToken = handler.ReadJwtToken(tokenModel.Token);

            var iss    = parser.GetClaim(readToken, "iss");
            var email  = parser.GetClaim(readToken, "email");
            var userId = parser.GetClaim(readToken, "userId");

            Assert.Equal(param.ValidIssuer, iss);
            Assert.Equal("*****@*****.**", email);
            Assert.Equal("1", userId);
        }
Пример #5
0
        public void Verify_ForFreshToken_ReturnsCorrectExpiryDate()
        {
            var mockedDateTimeProvider = new Mock <IDateTimeProvider>();
            var dateFormat             = "yyyy-MM-dd HH:mm";
            var dateNow = DateTime.UtcNow;

            // we are using mocked IDateTimeProvider to make sure we are refering to same "now"
            mockedDateTimeProvider.Setup(p => p.GetNow()).Returns(dateNow);
            var parser = new JwtParser(mockedDateTimeProvider.Object);
            var dateNowFutureString = dateNow.AddDays(parser.GetExpiredDays()).ToString(dateFormat);

            AcquireTokenModel tokenModel       = parser.AcquireToken("*****@*****.**", 1);
            VerifyResultModel result           = parser.Verify(tokenModel.Token);
            string            expiryDateString = null;

            if (result.ExpiryDate != null)
            {
                expiryDateString = result.ExpiryDate.Value.ToString(dateFormat);
            }

            Assert.Equal(dateNowFutureString, expiryDateString);
        }
Пример #6
0
        public AcquireTokenModel AcquireEmailConfirmationToken(string formEmail, int userId)
        {
            var handler     = new JwtSecurityTokenHandler();
            var credentials = new SigningCredentials(encodedSecretKey, SecurityAlgorithms.HmacSha256Signature);

            ClaimsIdentity identity;

            try
            {
                identity = new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.Email, formEmail),
                    new Claim(ClaimIssuer, GetIssuerName()),
                    new Claim(ClaimUserId, userId.ToString()),
                });
            }
            catch (Exception)
            {
                return(null);
            }

            var tokenDescriptor = new SecurityTokenDescriptor()
            {
                Subject            = identity,
                SigningCredentials = credentials,
                Expires            = dateTimeProvider.GetNow().AddDays(GetExpiredDays()),
            };

            var plainToken = handler.CreateToken(tokenDescriptor);

            // Encoded token
            var result = new AcquireTokenModel()
            {
                Token = handler.WriteToken(plainToken)
            };

            return(result);
        }