예제 #1
0
        public async Task <string> GenerateToken(UserForLoginRequest userForLoginRequest, string secret, string issuer, string audience, CancellationToken cancellationToken = default(CancellationToken))
        {
            var userFromRepo = await _uow.AppUsers.GetUserByEmail(userForLoginRequest.Email, cancellationToken);

            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
                new Claim(ClaimTypes.Name, userFromRepo.FirstName + " " + userFromRepo.LastName)
            };

            var tokenHandler = new JwtSecurityTokenHandler();

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Expires            = DateTime.Now.AddMinutes(5),
                Issuer             = issuer,
                Audience           = audience,
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), SecurityAlgorithms.HmacSha512)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));;
        }
예제 #2
0
        public async Task <IActionResult> Login([FromBody] UserForLoginRequest userForLoginRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var user = await _authService.Login(userForLoginRequest);

                if (user == null)
                {
                    return(Unauthorized());
                }

                var token = await _authService.GenerateToken(userForLoginRequest, _secret, _issuer, _audience);

                var tokenResponse = new TokenResponse {
                    Id = user.Id, FullName = user.FirstName + " " + user.LastName, Token = token.ToString()
                };

                return(Ok(tokenResponse));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(StatusCode(500));
            }
        }
예제 #3
0
        public async Task <IActionResult> Login(UserForLoginRequest loginRequest)
        {
            var result = await _mediator.Send(new UserForLoginCommand(loginRequest));

            if (result.Success)
            {
                return(Ok(result));
            }
            return(BadRequest(result));
        }
예제 #4
0
        public async Task <IActionResult> Login([FromBody] UserForLoginRequest userForLogin)
        {
            User userFromRepo        = null;
            SigningCredentials creds = null;

            try
            {
                userFromRepo = await _repo.Login(userForLogin.Username.ToLower(), userForLogin.Password);

                if (userFromRepo == null)
                {
                    return(Unauthorized());
                }


                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config.GetSection("AppSettings:Secret").Value));

                creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
            }
            catch (Exception e)
            {
                _logger.LogError(Guid.NewGuid().ToString(), e);
            }
            var claims = new List <Claim>()
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),

                new Claim(ClaimTypes.Name, userFromRepo.Username)
            };

            claims.AddRange(userFromRepo.Roles.Select(role => new Claim(ClaimTypes.Role, role.Name.ToString())));

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(claims),
                Expires            = DateTime.Now.AddDays(1),
                SigningCredentials = creds
            };
            var tokenHandler = new JwtSecurityTokenHandler();

            var token = tokenHandler.CreateToken((tokenDescriptor));

            return(Ok(new
            {
                token = tokenHandler.WriteToken(token),
                userFromRepo.Username
            }));
        }
예제 #5
0
        public async Task <UserForListResponse> Login(UserForLoginRequest userForLoginRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            var userFromRepo = await _uow.AppUsers.GetUserByEmail(userForLoginRequest.Email, cancellationToken);

            if (userFromRepo == null)
            {
                return(null);
            }

            if (!VerifyPasswordHash(userForLoginRequest.Password, userFromRepo.PasswordHash, userFromRepo.PasswordSalt))
            {
                return(null);
            }

            var userToReturn = _mapper.Map <UserForListResponse>(userFromRepo);

            return(userToReturn);
        }
        public async Task <IActionResult> Login([FromBody] UserForLoginRequest userForLoginRequest)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest());
                }

                var userToLogin = await _userService.GenerateTokenAsync(userForLoginRequest.UserName.ToLower(), userForLoginRequest.Password, _configuration.GetSection("AppSettings:Token").Value);

                if (userToLogin == null)
                {
                    return(Unauthorized());
                }

                return(Ok(userToLogin));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(StatusCode(500));
            }
        }
예제 #7
0
 public UserForLoginCommand(UserForLoginRequest userForLoginRequest)
 {
     _userForLoginRequest = userForLoginRequest;
 }