public ReadUserM Login(string email, string password)
        {
            ReadUserM user = new ReadUserM();

            //비밀번호 검증
            bool verified = userService.VerifyUser(email, password);

            // 비밀번호 검증 완료 시
            if (verified)
            {
                UserT userEntity = userService.GetUserByEmail(email);
                user = mapper.Map <UserT, ReadUserM>(userEntity);

                // 토큰생성
                TokenT authEntity = authService.CreateToken(user);
                TokenM token      = mapper.Map <TokenT, TokenM>(authEntity);
                user.Token = token;
            }
            else
            {
                throw new IncorrectDataException("비밀번호가 올바르지 않습니다.", "비밀번호 오류", LayerID.AuthController);
            }

            logger.Log(LogLevel.Info, string.Format("호출 성공 : {0}", MethodBase.GetCurrentMethod().Name));
            return(user);
        }
Пример #2
0
        /// <summary>
        /// Access Token 유효성 체크
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="refreshToken"></param>
        /// <returns></returns>
        public TokenT ReadAccessToken(string accessToken, string refreshToken)
        {
            TokenT token = authRepository.SelectTokenByRefreshToken(refreshToken);

            if (token != null)
            {
                // Access Token 일치 여부
                if (token.AccessToken != accessToken)
                {
                    throw new BadRequestException("정상적인 토큰이 아닙니다.", "토큰 오류", LayerID.AuthController);
                }

                // Refresh Token 만료시간 확인
                if (token.RefreshTokenExpireDate < CommonHelper.GetDateTimeNow)
                {
                    throw new UnauthorizedException("Refresh 토큰이 만료되었습니다. 다시 로그인 해주세요.", "권한 오류", LayerID.AuthController);
                }

                return(token);
            }
            else
            {
                throw new NotFoundException("토큰이 존재하지 않습니다.", "토큰 오류", LayerID.AuthController);
            }
        }
        public int UpsertToken(TokenT apiToken)
        {
            string sql = SQLHelper.GetSqlByMethodName(MethodBase.GetCurrentMethod().Name);

            var parameters = new
            {
                USER_NO           = apiToken.UserNo,
                ACCESS_TOKEN      = apiToken.AccessToken,
                REFRESH_TOKEN     = apiToken.RefreshToken,
                SCOPE             = apiToken.Scope,
                ACCESS_EXPIRE_DT  = apiToken.AccessTokenExpireDate,
                REFRESH_EXPIRE_DT = apiToken.RefreshTokenExpireDate
            };

            return(Connection.Execute(sql, parameters));
        }
        public TokenM RefreshToken(string accessToken, string refreshToken)
        {
            TokenM tokenModel = new TokenM();
            TokenT token      = authService.ReadAccessToken(accessToken, refreshToken);

            DateTime validTo          = new JwtSecurityTokenHandler().ReadJwtToken(accessToken).ValidTo;
            DateTime tokenExpiredTime = CommonHelper.GetDateTime(validTo);

            if (tokenExpiredTime < DateTime.Now)
            {
                UserT     userEntity = userService.GetUser(token.UserNo);
                ReadUserM user       = mapper.Map <UserT, ReadUserM>(userEntity);

                TokenT authEntity = authService.CreateToken(user);
                tokenModel = mapper.Map <TokenT, TokenM>(authEntity);
            }
            else
            {
                throw new BadRequestException("토큰 만료 시간이 유효합니다.", "토큰 오류", LayerID.AuthController);
            }

            logger.Log(LogLevel.Info, string.Format("호출 성공 : {0}", MethodBase.GetCurrentMethod().Name));
            return(tokenModel);
        }
Пример #5
0
        public TokenT CreateToken(ReadUserM user)
        {
            // authentication successful so generate jwt token
            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(AppConfiguration.JwtSecret);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim(ClaimTypes.Sid, user.UserNo)
                }),
                Expires            = DateTime.Now.AddHours(2),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature),
                IssuedAt           = DateTime.Now,
                Audience           = "aud.allthatbts.com",
                Issuer             = "api.allthatbts.com",
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);


            TokenT apiToken = new TokenT()
            {
                UserNo                 = user.UserNo,
                AccessToken            = tokenHandler.WriteToken(token),
                AccessTokenExpireDate  = tokenDescriptor.Expires.Value,
                RefreshToken           = CreateRefreshToken(),
                RefreshTokenExpireDate = DateTime.Now.AddDays(7),
                Scope = null
            };

            // 토큰 DB에 저장
            authRepository.UpsertToken(apiToken);
            apiToken = authRepository.SelectToken(user.UserNo);

            return(apiToken);
        }