예제 #1
0
        public async Task <IActionResult> RequestToken(RequestTokenDto dto)
        {
            _logger.LogInformation("Requesting user token for user {Email}", dto?.Email);

            if (!await _userService.ValidateUserPassword(dto.Email, dto.Password))
            {
                _logger.LogWarning("Username or password is invalid");
                return(BadRequest("Username or password is invalid"));
            }

            var user = await _userService.GetUser(dto.Email);

            if (!user.IsActive)
            {
                _logger.LogWarning("User is suspended");
                return(BadRequest("User is suspended"));
            }

            var userRole = await _userService.GetUserRole(dto.Email);

            var userProjects = await GetUserProjects(dto.Email);

            var tokenKey      = _configuration["Security:Tokens:Key"];
            var tokenIssuer   = _configuration["Security:Tokens:Issuer"];
            var tokenAudience = _configuration["Security:Tokens:Audience"];

            var token = AuthorizationToken.GenerateToken(user.Id, dto.Email, userRole, userProjects, tokenKey, tokenIssuer,
                                                         tokenAudience);

            return(Ok(token));
        }
예제 #2
0
        public async Task <IActionResult> RefreshToken()
        {
            var userId = User.GetUserId();

            _logger.LogRequest("Refreshing user token for user {userId}", userId);

            var user = await _userService.GetUserById(userId);

            if (!user.IsActive)
            {
                _logger.LogWarning("User is suspended");
                return(BadRequest("User is suspended"));
            }

            var userRole = await _userService.GetUserRole(user.UserName);

            var userProjects = await GetUserProjects(user.UserName);

            var tokenKey      = _configuration["Security:Tokens:Key"];
            var tokenIssuer   = _configuration["Security:Tokens:Issuer"];
            var tokenAudience = _configuration["Security:Tokens:Audience"];

            var token = AuthorizationToken.GenerateToken(user.Id, user.UserName, user.FirstName, user.LastName,
                                                         userRole, userProjects, tokenKey, tokenIssuer, tokenAudience);

            _logger.LogRequest("Refreshed token for user {userId} retrieved", userId);

            return(Ok(token));
        }
예제 #3
0
        public async Task <IActionResult> RefreshToken()
        {
            var user = await _userService.GetUser(User.Identity.Name);

            if (!user.IsActive)
            {
                _logger.LogWarning("User is suspended");
                return(BadRequest("User is suspended"));
            }

            var userRole = await _userService.GetUserRole(user.Email);

            var userProjects = await GetUserProjects(user.Email);

            var tokenKey      = _configuration["Security:Tokens:Key"];
            var tokenIssuer   = _configuration["Security:Tokens:Issuer"];
            var tokenAudience = _configuration["Security:Tokens:Audience"];

            var token = AuthorizationToken.GenerateToken(user.Id, user.Email, user.FirstName, user.LastName,
                                                         userRole, userProjects, tokenKey, tokenIssuer, tokenAudience);

            return(Ok(token));
        }
예제 #4
0
        public async Task <IActionResult> RequestToken(RequestTokenDto dto)
        {
            _logger.LogRequest("Requesting user token for user {UserName}", dto?.UserName);

            var signInResult = await _userService.ValidateUserPassword(dto.UserName, dto.Password);

            if (!signInResult.Succeeded)
            {
                if (signInResult.RequiresTwoFactor && _applicationSetting.EnableTwoFactorAuth)
                {
                    if (!string.IsNullOrEmpty(dto.AuthenticatorCode))
                    {
                        var twoFactorResult = await _userService.VerifyTwoFactorToken(dto.UserName, dto.AuthenticatorCode);

                        if (!twoFactorResult)
                        {
                            return(BadRequest("Authenticator Code is not correct"));
                        }
                    }
                    else if (!string.IsNullOrEmpty(dto.RecoveryCode))
                    {
                        var recoveryResult = await _userService.RedeemTwoFactorRecoveryCode(dto.UserName, dto.RecoveryCode);

                        if (!recoveryResult)
                        {
                            return(BadRequest("Recovery Code is not correct"));
                        }
                    }
                    else
                    {
                        return(Accepted("/account/token", TokenResponses.RequiresTwoFactor));
                    }
                }
                else if (!signInResult.RequiresTwoFactor)
                {
                    _logger.LogWarning("Username or password is invalid. Username: {UserName}", dto?.UserName);
                    return(BadRequest("Username or password is invalid"));
                }
            }

            var user = await _userService.GetUser(dto.UserName);

            if (!user.IsActive)
            {
                _logger.LogWarning("User is suspended");
                return(BadRequest("User is suspended"));
            }

            var userRole = await _userService.GetUserRole(dto.UserName);

            var userProjects = await GetUserProjects(dto.UserName);

            var tokenKey      = _configuration["Security:Tokens:Key"];
            var tokenIssuer   = _configuration["Security:Tokens:Issuer"];
            var tokenAudience = _configuration["Security:Tokens:Audience"];

            var token = AuthorizationToken.GenerateToken(user.Id, user.UserName, user.FirstName, user.LastName,
                                                         userRole, userProjects, tokenKey, tokenIssuer, tokenAudience);

            _logger.LogResponse("Token for user {UserName} retrieved", dto?.UserName);

            return(Ok(token));
        }