package kcc.let.uat.uia.web; import org.apache.poi.poifs.crypt.Decryptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.barocert.BarocertException; import com.barocert.kakaocert.KakaocertService; import com.barocert.navercert.NavercertService; /** * @packageName : kcc.let.uat.uia.web * @fileName : SocialCertController.java * @author : JunHo Lee * @date : 2024.11.21 * @description : 소셜 로그인(네이버, 카카오) * =========================================================== * DATE AUTHOR NOTE * ----------------------------------------------------------- * 2024.11.21 JunHo Lee 최초 생성 */ @Controller public class SocialCertController { @Autowired private NavercertService navercertService; @Autowired private KakaocertService kakaocertService; @Value("#{NAVER_CONFIG.ClientCode}") private String NaverClientCode; @Value("#{KAKAO_CONFIG.ClientCode}") private String KakaoClientCode; /** * 본인인증 요청 * * @param clientCode * 이용기관코드 * @param identity * 본인인증 요청정보 * @return ResponseVerify * 본인인증 요청 응답정보 * @throws BarocertException */ @RequestMapping(value = "/web/user/cert/nCert.do") public String requestIdentity(Model m) throws BarocertException { // 본인인증 요청 정보 객체 com.barocert.navercert.identity.Identity identity = new com.barocert.navercert.identity.Identity(); // 수신자 휴대폰번호 - 11자 (하이픈 제외) identity.setReceiverHP(navercertService.encrypt("01030266269")); // 수신자 성명 - 80자 identity.setReceiverName(navercertService.encrypt("이준호")); // 수신자 생년월일 - 8자 (yyyyMMdd) identity.setReceiverBirthday(navercertService.encrypt("19890202")); // 고객센터 연락처 - 최대 12자 identity.setCallCenterNum("1600-9854"); // 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능 identity.setExpireIn(1000); // AppToApp 인증요청 여부 // true - AppToApp 인증방식, false - 푸시(Push) 인증방식 identity.setAppUseYN(false); try { com.barocert.navercert.identity.IdentityReceipt request = navercertService.requestIdentity(NaverClientCode, identity); // Boolean test = navercertService.isUseStaticIP(); System.out.println("ReceiptID :: " + request.getReceiptID()); System.out.println("Scheme :: " + request.getScheme()); System.out.println("MarketUrl :: " + request.getMarketUrl()); /** * 본인인증 서명검증 * 인증되었을경우 State : 1 * 인증안되었을경우 State : 0 */ // if(status.getState() == 0) { // // }else if(status.getState() == 1) { // // } //서명이 되지 않았을경우 com.barocert.navercert.identity.IdentityStatus status = navercertService.getIdentityStatus(NaverClientCode, request.getReceiptID()); //서명이 되었을경우 com.barocert.navercert.identity.IdentityStatus status2 = navercertService.getIdentityStatus(NaverClientCode, request.getReceiptID()); com.barocert.navercert.identity.IdentityResult result = navercertService.verifyIdentity(NaverClientCode, request.getReceiptID()); System.out.println("Ci :: " + result.getCi()); System.out.println("ReceiptID :: " + result.getReceiptID()); System.out.println("ReceiverDay :: " + result.getReceiverDay()); System.out.println("ReceiverEmail :: " + result.getReceiverEmail()); System.out.println("ReceiverForeign :: " + result.getReceiverForeign()); System.out.println("ReceiverGender :: " + result.getReceiverGender()); System.out.println("ReceiverHP :: " + result.getReceiverHP()); System.out.println("ReceiverName :: " + result.getReceiverName()); System.out.println("ReceiverYear :: " + result.getReceiverYear()); System.out.println("SignedData :: " + result.getSignedData()); System.out.println("State :: " + result.getState()); m.addAttribute("result", result); } catch (BarocertException ne) { m.addAttribute("Exception", ne); return "exception"; } return "uat/uia/NCert"; } // @RequestMapping(value = "navercert/requestIdentity", method = RequestMethod.GET) @RequestMapping(value = "/web/user/cert/kCert.do") public String requestIdentity_k(Model m) throws BarocertException { // 본인인증 요청 정보 객체 com.barocert.kakaocert.identity.Identity identity = new com.barocert.kakaocert.identity.Identity(); // 수신자 휴대폰번호 - 11자 (하이픈 제외) identity.setReceiverHP(kakaocertService.encrypt("01012341234")); // 수신자 성명 - 80자 identity.setReceiverName(kakaocertService.encrypt("홍길동")); // 수신자 생년월일 - 8자 (yyyyMMdd) identity.setReceiverBirthday(kakaocertService.encrypt("19700101")); // 인증요청 메시지 제목 - 최대 40자 identity.setReqTitle("본인인증 요청 메시지 제목"); // 커스텀 메시지 - 최대 500자 identity.setExtraMessage(kakaocertService.encrypt("본인인증 커스텀 메시지")); // 인증요청 만료시간 - 최대 1,000(초)까지 입력 가능 identity.setExpireIn(1000); // 서명 원문 - 최대 40자 까지 입력가능 identity.setToken(kakaocertService.encrypt("본인인증 요청 원문")); // AppToApp 인증요청 여부 // true - AppToApp 인증방식, false - Talk Message 인증방식 identity.setAppUseYN(false); try { com.barocert.kakaocert.identity.IdentityReceipt result = kakaocertService.requestIdentity(KakaoClientCode, identity); m.addAttribute("result", result); } catch (BarocertException ke) { m.addAttribute("Exception", ke); return "exception"; } return "uat/uia/KCert"; } private String decryptNaver() { //복호화 키 String secretKey = "LqZ8a…"; // 초기화 벡터 (고정값) String iv = "6C2Syq8t…"; // 암호문 String cipherText = "6MXhzI8yDVdCDktJ/Qdz9S…"; try { // 복호화 // Decryptor decryptor = new Decryptor(); // String decryptedCI = decryptor.decrypt(secretKey, iv, cipherText); // System.out.println(decryptedCI); } catch (Exception e) { e.printStackTrace(); } return ""; } }