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);
        }
        public async Task <TokenM> RefreshToken(string refreshToken)
        {
            var result = new TokenM();

            using (var client = new HttpClient())
            {
                var discovery = await DiscoveryService.GetDiscovery();

                var response = await client.RequestRefreshTokenAsync(new RefreshTokenRequest
                {
                    Address      = discovery.TokenEndpoint,
                    ClientId     = Config.ClientId,
                    ClientSecret = Config.ClientSecret,
                    RefreshToken = refreshToken
                });

                if (response.IsError)
                {
                    throw new Exception(response.Error);
                }

                result = Mapper.Map <TokenM>(response);
            }

            return(result);
        }
        public async Task <TokenM> GetToken(string phone, string code)
        {
            var result = new TokenM();

            using (var client = new HttpClient())
            {
                var parameters = new Dictionary <string, string>
                {
                    { "phone_number", phone },
                    { "verification_token", code }
                };

                var discovery = await DiscoveryService.GetDiscovery();

                var response = await client.RequestTokenAsync(new TokenRequest
                {
                    Address      = discovery.TokenEndpoint,
                    GrantType    = Config.GrandType,
                    ClientId     = Config.ClientId,
                    ClientSecret = Config.ClientSecret,
                    Parameters   = parameters
                });

                if (response.IsError)
                {
                    throw new Exception(response.Error);
                }

                result = Mapper.Map <TokenM>(response);
            }

            return(result);
        }
        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);
        }