Пример #1
0
        public Token GenerateToken(AccessCredentials credencial)
        {
            ClaimsIdentity identity = new ClaimsIdentity(
                new GenericIdentity(credencial.UserID, "Login"),
                new[] {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                new Claim(JwtRegisteredClaimNames.UniqueName, credencial.UserID)
            }
                );


            DateTime dateTime       = DateTime.Now;
            DateTime dateTimeExpire = dateTime + TimeSpan.FromSeconds(_tokenConfigurations.Seconds);
            var      handler        = new JwtSecurityTokenHandler();

            var securityToken = handler.CreateToken(new Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor
            {
                Issuer             = _tokenConfigurations.Issuer,
                Audience           = _tokenConfigurations.Audience,
                SigningCredentials = _signingConfigurations.SigningCredentials,
                Subject            = identity,
                NotBefore          = dateTime,
                Expires            = dateTimeExpire
            });

            var token = handler.WriteToken(securityToken);

            var result = new Token()
            {
                Authenticated = true,
                Created       = dateTime.ToString("yyyy-MM-dd HH:mm:ss"),
                Expiration    = dateTimeExpire.ToString("yyyy-MM-dd HH:mm:ss"),
                AccessToken   = token,
                RefreshToken  = Guid.NewGuid().ToString().Replace("-", String.Empty),
                Message       = "OK"
            };

            var refreshTokenData = new RefreshTokenData();

            refreshTokenData.RefreshToken = result.RefreshToken;
            refreshTokenData.UserID       = credencial.UserID;


            TimeSpan finalExpiration =
                TimeSpan.FromSeconds(_tokenConfigurations.FinalExpiration);


            DistributedCacheEntryOptions options = new DistributedCacheEntryOptions();

            options.SetAbsoluteExpiration(finalExpiration);
            _cache.SetString(result.RefreshToken, JsonConvert.SerializeObject(refreshTokenData), options);
            return(result);
        }
Пример #2
0
        public bool ValidateCredentials(AccessCredentials credencial)
        {
            bool credentialValidas = false;

            if (credencial != null && !string.IsNullOrWhiteSpace(credencial.UserID))
            {
                if (credencial.GrantType == "password")
                {
                    var userIdentity = _userManager.FindByNameAsync(credencial.UserID).Result;
                    if (userIdentity != null)
                    {
                        var resultadoLogin = _signInManager.CheckPasswordSignInAsync(userIdentity, credencial.Password, false).Result;
                        if (resultadoLogin.Succeeded)
                        {
                            credentialValidas = _userManager.IsInRoleAsync(userIdentity, Roles.ROLE_API_PRODUCT).Result;
                        }
                    }
                }
                else if (credencial.GrantType == "refresh_token")
                {
                    if (!String.IsNullOrWhiteSpace(credencial.RefreshToken))
                    {
                        RefreshTokenData refreshTokenBase = null;


                        string strTokenStored = _cache.GetString(credencial.RefreshToken);
                        if (!String.IsNullOrWhiteSpace(strTokenStored))
                        {
                            refreshTokenBase = JsonConvert
                                               .DeserializeObject <RefreshTokenData>(strTokenStored);
                        }

                        credentialValidas = (refreshTokenBase != null &&
                                             credencial.UserID == refreshTokenBase.UserID &&
                                             credencial.RefreshToken == refreshTokenBase.RefreshToken);

                        if (credentialValidas)
                        {
                            _cache.Remove(credencial.RefreshToken);
                        }
                    }
                }
            }


            return(credentialValidas);
        }