Пример #1
0
        private void ProcessIdentity(TrackingTokenViewModel trackingToken)
        {
            var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme);

            identity.AddClaims(trackingToken.Claims);
            ClaimsPrincipal principal = new ClaimsPrincipal(identity);
        }
Пример #2
0
        private async Task ProcessTrackingToken(string userName, TrackingTokenViewModel trackingToken)
        {
            await _trackingTokenDomainService.DisableOldTokens(userName);

            await _trackingTokenDomainService.AddAsync(trackingToken);

            ProcessIdentity(trackingToken);
        }
Пример #3
0
        internal static bool ValidateToken(string currentJWToken, TrackingTokenViewModel trackingToken, string currentUser)
        {
            bool resultado = false;

            if (!AreParametesOk(currentJWToken, trackingToken, currentUser))
            {
                return(resultado);
            }
            if (!trackingToken.UserName.Equals(currentUser))
            {
                return(resultado);
            }

            var tokenHandler = new JwtSecurityTokenHandler();
            var token        = tokenHandler.ReadJwtToken(currentJWToken);


            if (!trackingToken.Issuer.Equals(token.Issuer))
            {
                return(resultado);
            }

            if (!CompareDates(trackingToken.Exp, token.ValidTo))
            {
                return(resultado);
            }

            var iatDate = GetDateValue(
                token.Claims.Where(c => c.Type == JwtRegisteredClaimNames.Iat).FirstOrDefault().Value);
            var nbfDate = GetDateValue(
                token.Claims.Where(c => c.Type == JwtRegisteredClaimNames.Nbf).FirstOrDefault().Value);
            var aud      = token.Claims.Where(c => c.Type == JwtRegisteredClaimNames.Aud).FirstOrDefault().Value;
            var tokenAlg = token.SignatureAlgorithm;

            if (!CompareDates(trackingToken.Iat, iatDate))
            {
                return(resultado);
            }
            if (!CompareDates(trackingToken.Nbf, nbfDate))
            {
                return(resultado);
            }
            if (!trackingToken.Audience.Equals(aud))
            {
                return(resultado);
            }
            if (!AppConfiguration.TokenAlgorithm.Equals(tokenAlg))
            {
                return(resultado);
            }

            return(true);
        }
Пример #4
0
        public static TrackingTokenViewModel Build(UserViewModel user)
        {
            var trackingToken = new TrackingTokenViewModel();
            var current       = DateTime.UtcNow;
            var expiration    = current.AddMinutes(AppConfiguration.TokenExpiration);

            List <Claim> claims = GetClaims(user, current, expiration, trackingToken);

            var tokenHandler = new JwtSecurityTokenHandler();
            var token        = tokenHandler.CreateToken(GetTokenDescriptor(claims, expiration));

            trackingToken.Token = tokenHandler.WriteToken(token);

            return(trackingToken);
        }
Пример #5
0
        private static List <Claim> GetClaims(
            UserViewModel user, DateTime current, DateTime expiration, TrackingTokenViewModel trackingToken)
        {
            trackingToken.Audience  = AppConfiguration.TokenAudiencie;
            trackingToken.Exp       = expiration;
            trackingToken.Iat       = current;
            trackingToken.Issuer    = AppConfiguration.TokenIssuer;
            trackingToken.Nbf       = current;
            trackingToken.TokenId   = Guid.NewGuid();
            trackingToken.UserEmail = user.Email;
            trackingToken.UserName  = user.UserName;
            trackingToken.UserId    = user.Id;

            var currentString = new DateTimeOffset(current).ToUnixTimeSeconds().ToString();
            var otroString    = EpochTime.GetIntDate(current).ToString();

            try
            {
                var claims = new List <Claim>()
                {
                    new Claim(JwtRegisteredClaimNames.Jti, trackingToken.TokenId.ToString()),
                    new Claim(ClaimTypes.NameIdentifier, trackingToken.UserName),
                    new Claim(ClaimTypes.Name, trackingToken.UserName),
                    new Claim(JwtRegisteredClaimNames.Email, trackingToken.UserEmail),
                    new Claim(JwtRegisteredClaimNames.NameId, user.Id.ToString()),
                    new Claim(JwtRegisteredClaimNames.Iat, currentString, ClaimValueTypes.String),
                    new Claim(JwtRegisteredClaimNames.Nbf, otroString, ClaimValueTypes.String),
                    new Claim(JwtRegisteredClaimNames.Exp, EpochTime.GetIntDate(trackingToken.Exp).ToString()),
                    new Claim(JwtRegisteredClaimNames.Aud, trackingToken.Audience),
                    new Claim(JwtRegisteredClaimNames.Iss, trackingToken.Issuer),
                    new Claim(ClaimTypes.Role, user.RolesNames, ClaimValueTypes.String, trackingToken.Issuer)
                };

                return(claims);
            }
            catch (Exception ex)
            {
                string a = ex.Message;
                return(null);
            }
        }
Пример #6
0
 private static bool AreParametesOk(string currentJWToken, TrackingTokenViewModel trackingToken, string currentUser)
 {
     return(!string.IsNullOrWhiteSpace(currentJWToken) &&
            !string.IsNullOrWhiteSpace(currentUser) &&
            trackingToken != null);
 }