Exemplo n.º 1
0
        public async Task <TokenOutputDto> RefreshToken(TokenInputDto model)
        {
            var user = await _userManager.FindByEmailAsync(model.Email);

            var checkRefreshToken = await _userManager.VerifyUserTokenAsync(user, "BBC", "RefreshToken", model.RefreshToken);

            if (checkRefreshToken)
            {
                //set new refresh token
                model.RefreshToken = await _userManager.GenerateUserTokenAsync(user, "BBC", "RefreshToken");

                await _userManager.SetAuthenticationTokenAsync(user, "BBC", "RefreshToken", model.RefreshToken);

                var tokenModel = new TokenOutputDto()
                {
                    UserId           = user.Id,
                    UserName         = user.UserName,
                    HasVerifiedEmail = true,
                    RefreshToken     = model.RefreshToken
                };

                JwtSecurityToken jwtSecurityToken = await CreateJwtToken(user);

                tokenModel.Token = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
                return(tokenModel);
            }
            return(new TokenOutputDto()
            {
                Errors = new string[]
                {
                    "Not Found User",
                }
            });
        }
Exemplo n.º 2
0
        public TokenOutputDto Generation(User user)
        {
            ClaimsIdentity identity = new ClaimsIdentity(
                new GenericIdentity(user.Id.ToString(), "Login"),
                new[] {
                new Claim(JwtRegisteredClaimNames.Jti, user.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.UniqueName, user.Name),
                new Claim("UserId", user.Id.ToString()),
                new Claim("UserName", user.Name),
                new Claim("Profile", user.Profile.Name),
            }
                );

            var handler       = new JwtSecurityTokenHandler();
            var securityToken = handler.CreateToken(new SecurityTokenDescriptor()
            {
                Issuer             = _tokenConfiguration.Issuer,
                Audience           = _tokenConfiguration.Audience,
                SigningCredentials = _siginConfigurations.signingCredentials,
                Subject            = identity,
                NotBefore          = DateTime.Now,
                Expires            = DateTime.Now.AddSeconds(_tokenConfiguration.Seconds)
            });

            var token = new TokenOutputDto
            {
                Token        = handler.WriteToken(securityToken),
                RefreshToken = Guid.NewGuid().ToString(),
                UserId       = user.Id
            };

            SaveCache(token);

            return(token);
        }
Exemplo n.º 3
0
        public async Task <TokenOutputDto> CreateToken(LoginInputDto model)
        {
            var tokenModel = new TokenOutputDto()
            {
                HasVerifiedEmail = false
            };
            var user = await _userManager.FindByEmailAsync(model.Email);

            if (user == null)
            {
                tokenModel.Errors = new string[] { "Not Found User" };
                return(tokenModel);
            }


            //if (!_environment.IsDevelopment())
            //{
            //    if (!user.EmailConfirmed)
            //    {
            //        tokenModel.Errors = new string[] { "No Email Confirmed" };
            //        return tokenModel;
            //    }

            //    if (user.LockoutEnabled)
            //    {
            //        tokenModel.Errors = new string[] { "This account has been locked." };
            //        return tokenModel;
            //    }
            //}


            if (await _userManager.CheckPasswordAsync(user, model.Password))
            {
                tokenModel.HasVerifiedEmail = true;
                tokenModel.UserId           = user.Id;
                tokenModel.UserName         = user.UserName;
                var roles = await _userManager.GetRolesAsync(user);

                tokenModel.Roles = roles.ToList();
                JwtSecurityToken jwtSecurityToken = await CreateJwtToken(user);

                tokenModel.Token        = new JwtSecurityTokenHandler().WriteToken(jwtSecurityToken);
                tokenModel.RefreshToken = await _userManager.GetAuthenticationTokenAsync(user, "BBC", "RefreshToken");

                if (String.IsNullOrEmpty(tokenModel.RefreshToken))
                {
                    tokenModel.RefreshToken = await _userManager.GenerateUserTokenAsync(user, "BBC", "RefreshToken");

                    await _userManager.SetAuthenticationTokenAsync(user, "BBC", "RefreshToken", tokenModel.RefreshToken);
                }

                return(tokenModel);
            }
            tokenModel.Errors = new string[] { "Invalid login attempt." };
            return(tokenModel);
        }
        public ActionResult RefreshToken(RefreshTokenInputDto refreshTokenInput)
        {
            TokenOutputDto token = null;

            if (IsModelValid() && refreshTokenInput.GrantType.ToLower().Equals("refresh_token"))
            {
                var user = _service.FindById(CurrentUser);
                token = _tokenService.RenewToken(refreshTokenInput, user);
            }

            return(CustomizeResponse(token));
        }
Exemplo n.º 5
0
        private void SaveCache(TokenOutputDto token)
        {
            var refreshTokenData = new RefreshTokenDto
            {
                UserId       = token.UserId,
                RefreshToken = token.RefreshToken
            };

            var timeExpresion = TimeSpan.FromSeconds(_tokenConfiguration.RefreshTokenSeconds);

            DistributedCacheEntryOptions optionsCahce = new DistributedCacheEntryOptions();

            optionsCahce.SetAbsoluteExpiration(timeExpresion);

            _cache.SetString(refreshTokenData.RefreshToken, JsonConvert.SerializeObject(refreshTokenData), optionsCahce);
        }
        public ActionResult GenerationToken(UserInputDto userInput)
        {
            TokenOutputDto token = null;

            if (IsModelValid())
            {
                var user = _service.FindByEmailAndPassword(userInput);
                if (user == null)
                {
                    AddError("Usuário e senha invalido");
                }
                else
                {
                    token = _tokenService.Generation(user);
                }
            }

            return(CustomizeResponse(token));
        }