public ActionResult <TestModel01> Test01(int nData, string sData) { //리턴 보조 ApiResultReady rrResult = new ApiResultReady(this); //리턴용 모델 TestModel01 armResult = new TestModel01(); rrResult.ResultObject = armResult; if (0 <= nData) {//양수다. armResult.nTest = nData; armResult.sTest = sData; } if (false == rrResult.IsSuccess()) { rrResult.InfoCode = "1"; rrResult.Message = "'nData'에 음수가 입력되었습니다."; } return(rrResult.ToResult(armResult)); }
public ActionResult <SignInResultModel> RefreshToAccess( [FromForm] string sRefreshToken) { //결과용 ApiResultReady rrResult = new ApiResultReady(this); //엑세스 토큰 갱신용 모델 SignInResultModel rmResult = new SignInResultModel(); rrResult.ResultObject = rmResult; //API 호출 시간 DateTime dtNow = DateTime.Now; //리플레시 토큰 갱신 시도 기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.RefreshToken , 0 , string.Format("RefreshToAccess 시도 : {0}", sRefreshToken)); //토큰 갱신 요청 TokenResponse tr = GlobalStatic.TokenProc.RefreshTokenAsync(sRefreshToken).Result; //기존 로그인한 유저 검색 UserSignIn itemUSI = null; if (true == tr.IsError) {//토큰 갱신 실패 //DB에 있는 리플레시 토큰은 수동으로 확인해서 갱신해준다. //토큰 정보는 메모리에 저장되기 때문에 서버가 내려갔다 올라오면 토큰정보가 날아간다. //이런 예외를 처리하기위해 수동으로 리플레시 토큰을 갱신해야한다. using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 itemUSI = db1.UserSignIn .Where(m => m.RefreshToken == sRefreshToken) .FirstOrDefault(); if (null == itemUSI) {//정보 자체가 없다. rrResult.InfoCode = "-101"; rrResult.Message = "갱신실패 : 인증 정보가 없습니다."; } else if (dtNow > itemUSI.RefreshDate) {//인증정보의 유효기간이 지났다. rrResult.InfoCode = "-102"; rrResult.Message = "갱신실패 : 인증가능 기간이 지났습니다."; } else {//토큰이 살아있다. //유저를 검색한다. User findUser = db1.User .Where(w => w.idUser == itemUSI.idUser) .FirstOrDefault(); //토큰을 갱신한다. tr = GlobalStatic.TokenProc .RequestTokenAsync(findUser.SignEmail, findUser.Password) .Result; } } //end using db1 } //end if (true == tr.IsError) if (true == rrResult.IsSuccess()) { if (true == tr.IsError) { rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } } if (true == rrResult.IsSuccess()) {//에러가 없다. //유저 정보를 받는다. UserInfoResponse inrUser = GlobalStatic.TokenProc.UserInfoAsync(tr.AccessToken).Result; //유저 정보 추출 ClaimModel cm = new ClaimModel(inrUser.Claims); using (SpaNetCoreFoundationContext db1 = new SpaNetCoreFoundationContext()) { //기존 로그인한 유저 검색 itemUSI = db1.UserSignIn .Where(m => m.idUser == cm.id_int) .FirstOrDefault(); if (null == itemUSI) {//기존 로그인 정보가 없다, //이러면 강제로 토큰이 상실된 것일 수 있다. rrResult.InfoCode = "1"; rrResult.Message = "토큰 갱신에 실패하였습니다."; } else { //로그인 되어있는 유저정보 수정 itemUSI.RefreshToken = tr.RefreshToken; itemUSI.RefreshDate = dtNow.AddDays(30); //db 적용 db1.SaveChanges(); //유저에게 전달할 정보 만들기 rmResult.idUser = cm.id_int; rmResult.Email = cm.email; rmResult.ViewName = rmResult.Email; rmResult.access_token = tr.AccessToken; rmResult.refresh_token = tr.RefreshToken; //기록 GlobalSign.LogAdd_DB( 1 , ModelDB.UserSignLogType.RefreshToken , cm.id_int , string.Format("RefreshToAccess 성공 : {0}", rmResult.Email)); } }//end using db1 } return(rrResult.ToResult(rmResult)); }