====== NPKI(WizSign) 디바이스API 가이드 프로그램 ====== ===== 개요 ===== NPKI 가이드 프로그램(WizSign)은 모바일 디바이스 API 실행환경을 활용하여 하이브리드 앱을 개발 시 참고 및 활용될 수 있도록 구현된 전자정부 디바이스 API에 대한 가이드 앱으로써, 모바일 스마트 디바이스의 NPKI 관련 기능을 JavaScript 기반으로 구성 된 NPKI DeviceAPI 를 통하여 이용할 수 있도록 지원한다. \\ 또한, 전자정부 표준프레임워크 기반의 웹 서버 어플리케이션과 연계하여 모바일기기에 저장된 인증서를 정부에서 제공하는 인증을 이용하여 인증서 인증을 하고 결과를 서버에 저장하며 인증서 인증 결과 로그를 조회하는 기능으로 구성되어 있다. \\ ==== 특징 ==== 본 가이드 프로그램 에서는 NPKI 기능을 가이드 할 수 있도록 ** 모바일 기기 인증서 선택/인증하기 **, ** 인증 로그 정보 보기 ** 기능을 제공하고 있으며 웹 서버 어플리케이션에 ** 표준 보안 API ** 를 적용하여 인증서 정보를 확인 할 수 있는 기능으로 구현되었다. ==== 기능흐름도 ==== {{:egovframework:hyb:guide:add:NPKI기능흐름도.png?740|}} ==== 기능시퀀스 ==== {{:egovframework:hyb:guide:add:NPKI시퀀스다이어그램.png|}} ==== 전제조건 ==== ^구분^내용^ |Local 디바이스 개발 환경|전자정부표준프레임워크 개발환경2.5, Android SDK Revision 18(적용빌드번호 : GINGERBREAD EL21)| |서버 사이드 개발 환경|전자정부표준프레임워크 개발환경2.5 \\ 표준 보안 API 설정(아래 환경설정의 Server Application 참조 )| |Mash up Open API 연계|N/A| |테스트 디바이스 |Galaxy S2| |테스트 플랫폼 |Android 2.2| |추가 라이브러리 적용|NPKI WizSign 모듈| |크로스 도메인 사용|폰갭에서 특정 외부 도메인이나 외부 도메인의 하위 도메인을 사용해야할 경우,\\ Res/xml/config.xml에서 에 외부 도메인 주소를 추가 설정해야 외부 도메인에 접속할 수 있다.| NPKI WizSign Library ^파일명^설명^ |libs/jldap-4.3.jar| WizSign 라이브러리 | |libs/KSignCrypto_Applet.jar| WizSign 라이브러리 | |libs/WizSign.jar| 전자서명, 보안채널, 인증서 관련 기능들을 수행하는 핵심 라이브러리 | |assets/www/js/egovframework/mbl/hyb/wizsignpg.js| PhoneGap기반의 Hybrid앱에서 WizSign API를 사용하기 위한 자바스크립트 인터페이스 | ==== 제약사항 ==== == NPKI 기술협력에 대한 제약 사항 == NPKI 디바이스 API 구성 라이브러 중 아래 코드 라이브러리는 보안 Native Module로서 라이선스를 가지고 있다. 그에 따라, 표에 기재된 라이브러리의 경우 NPKI 디바이스 API 배포 시 배포 리소스에서 제외하여 배포되고, 해당 모듈을 적용하여, 테스트 및 실제 구현을 진행하고자 하는 정부기관이나, 업체에서는 아래 기술협력 업체로 연락 문의해야 한다. ^업체명^연락처^E-Mail^ |(주)케이사인|02-564-0182| men4u@ksign.com | === 전자정부 보안표준 API 적용을 위한 방법 === 전자정부 보안표준 API를 사용하기 위해서는 별도로 보안표준 API를 신청하여야 하며, 이는 행정전자서명 인증관리센터(http://www.gpki.go.kr)에서 주관하고 있다. \\ \\ 서비스 신청 방법은 다음과 같다. \\ \\ ▶ 표준 API 보급관리시스템 접속이 가능한 경우 \\ ㅇ [표준API보급관리시스템] 에서 웹으로 API신청(공문, 구성도 첨부) \\ ㅇ 서비스 URL : http://api.gpki.go.kr \\ 공문은 한국지역정보개발원 - 지역정보센터 - 정보기반과로 보내주면 된다. \\ 공문 내용은 업무시스템명, 담당자, 연락처 및 표준 API 를 신청한다는 내용. \\ - 해당서비스는 행정망에서만 이용가능함 - \\ \\ ▶ 외부망 (http://api.gpki.go.kr 접속 불가) 일경우 \\ ㅇ 행정전자서명 인증관리센터(http://www.gpki.go.kr) 사이트의 "자료실-인증서신청관련양식-7.표준 API 신청방법 및 표준 API 신청서"에 있는 표준 API 신청서를 작성하셔서 공문과 함께 신청서를 보내주면 된다. \\ 공문 수신처 : 한국지역정보개발원 - 지역정보센터 - 정보기반과 \\ 공문 내용은 업무시스템명, 담당자, 연락처 및 표준 API 를 신청한다는 내용. \\ \\ 기타 자세한 정보 확인 및 문의는 행정전자서명 인증관리센터(http://www.gpki.go.kr)를 참고한다. \\ \\ === 지원 디바이스 및 플랫폼 === N/A === 지원 디바이스 및 플랫폼 === N/A ===== 설명 ===== NPKI 디바이스API 가이드 프로그램은 크게 모바일 기기내의 인증서를 선택 및 서명 데이터를 만들어 웹 서버 어플리케이션으로 전송하여 인증서 인증하는 기능과 인증서 인증된 로그 데이터를 조회하는 기능으로 구성되어 있다.(관련기능 부분참조) ==== 관련 클래스다이어그램 ==== {{:egovframework:hyb:guide:add:npki클래스다이어그램.png?1024}} ==== Device Application ==== === 관련 소스 === ^유형^대상소스명^비고^ |Activity|kr.go.egovframework.hyb.pkiapi.wizsign.PKIWizSignAPIGuide_AndroidActivity|NPKI 가이드 프로그램 Activity Class| |CSS|assets/www/css/egovframwork/mbl/hyb/PKIWizSignAPI.css |NPKIAPI 가이드 프로그램 주요 Cascading Style Sheets| |IMAGE |assets/www/images/egovframwork/mbl/hyb/ |NPKIAPI 가이드 프로그램 주요 Image 폴더| |JS |assets/www/js/egovframwork/mbl/hyb/PKIWizSignAPI.js |NPKIAPI 가이드 프로그램 주요 JavaScript| |JS |assets/www/js/egovframwork/mbl/hyb/wizsignpg.js |NPKIAPI 가이드 프로그램 주요 JavaScript| |JS |assets/www/js/egovframwork/mbl/hyb/messages_ko.js |Validate 메세지 처리 JavaScript| |RES |assets/www/res/ |NPKIAPI 가이드 프로그램 주요 Resource 폴더| |XML |AndroidManiFest.xml |안드로이드 어플리케이션 설정 XML| |HTML|assets/www/PKIWizSignAPI.html|NPKIAPI 메인 페이지| |HTML|assets/www/Intro.html|NPKIAPI Intro 페이지| |HTML|assets/www/license.html|NPKIAPI 라이센스 페이지| |HTML|assets/www/overview.html|NPKIAPI 기능설명 페이지| === 전체 기능 API === [[egovframework:hyb:guide:add:npki_케이사인:wizsign_doc|WizSign API DOC]] === 가이드프로그램에서 활용한 API === == doSignature == * 선택한 인증서로 전자서명을 수행하여 서명값을 반환한다. \\ - 파라메터 : 인증서 번호, 인증서 비밀번호, 서명대상 원문 \\ - 반환값(해시 테이블) \\ 'signedData' : 서명데이터 'errMsg' : 에러 발생시 에러메시지 var args = new Array(); args[0] = selectCertNum.toString() ; args[1] = '1'; args[2] = stringToSign; WizSignPG.doSignature(args, function(result) { var signedData = result['signedData']; // 서명데이터 }, function(error) { alert(error['errMsg']); // 에러메시지 }); == getCertificates == * 저장된 인증서목록을 가져와 반환한다. - 파라메터 : N/A \\ - 반환값(해시 테이블) \\ 'Certificates' : 인증서 목록 'errMsg' : 에러 발생시 에러메시지 WizSignPG.getCertificates("", function(result) { var certList = result['Certificates']; for(var i=0 ; i 인증서 정보 해시테이블 ^해시테이블^설명^ |NUM|인증서 번호| |버전|인증서 버전| |일련번호|인증서 시리얼번호| |서명알고리즘|인증서 서명알고리즘| |발급자|인증서의 발급자 정보| |효력발생일|인증서의 효력 발생일| |만료일|인증서 만료일| |주체자|인증서 주체자 정보| |공개키알고리즘|인증서 공개키 알고리즘| |발급자시리얼번호|발급자시리얼번호| |공개키|공개키값| |기관키식별자|기관키식별자| |주체자식별자|주체자식별자| |정책|정책| |주체대체이름|주체대체이름| |CRL분배지점|CRL분배지점| |기관정보액세스|기관정보액세스(OCSP)| |키사용|키사용용도| |서명|인증서 서명값| == verifyCertPassword == * 선택한 인증서의 비밀번호를 검증한다. - 파라메터 : 인증서 번호, 인증서 비밀번호 \\ - 반환값(해시 테이블) \\ 'result' : 인증서 비밀번호 검증결과(성공시 'OK') 'errMsg' : 에러 발생시 에러메시지 var args = new Array(); args[0] = certNum.toString(); args[1] = certPass; WizSignPG.verifyCertPassword(args, function(result) { var runResult = result['result']; if(runResult == 'OK') { alert('인증서 비밀번호가 일치합니다.'); } }, function(error) { alert(error['errMsg']); }); ==== Server Application ==== === 관련 소스 === ^유형^대상소스명^비고^ |Controller|egovframework.hyb.add.pki.web.EgovPKIAndroidAPIController.java|NPKIAPI 가이드 프로그램 Controller Class| |Service|egovframework.hyb.add.pki.service.EgovPKIAndroidAPIService.java|NPKIAPI 가이드 프로그램 Service Class| |ServiceIimpl|egovframework.hyb.add.pki.service.impl.EgovPKIAndroidAPIServiceImpl.java|NPKIAPI 가이드 프로그램 ServiceImpl Class| |VO|egovframework.hyb.add.pki.service.PKIAndroidAPIDefaultVO.java|NPKIAPI 가이드 프로그램 VO Class| |VO|egovframework.hyb.add.pki.service.PKIAndroidAPIVO.java|NPKIAPI 가이드 프로그램 VO Class| |VO|egovframework.hyb.add.pki.service.PKIAndroidAPIXmlVO.java|NPKIAPI 가이드 프로그램 XML 관련 VO Class| |DAO|egovframework.hyb.add.pki.service.impl.PKIAndroidAPIDAO.java|NPKIAPI 가이드 프로그램 Dao Class| |QUERY XML|resources/egovframework/sqlmap/hyb/add/pki/EgovPKIAndroidAPIGuide_SQL_XXX.xml|NPKIAPI 가이드 프로그램 QUERY XML| |Idgen XML|resources/egovframework/spring/context-idgen.xml|NPKIAPI 가이드 프로그램 Id생성 Idgen XML| === 관련 테이블 === ^테이블명^테이블명(영문)^비고^ |PKI|PKI|인증서 인증 로그 관리| === 테이블 명세서 === * PKI ^No.^컬럼^컬럼명^타입^길이^Null^KEY^ |1|SN|일련번호|NUMERIC|6|NotNull|pk| |2|UUID|UUID|VARCHAR|50|NotNull|pk| |3|DM|DM|VARCHAR|255|Null| | |4|CRTFC_DT|인증일시|DATE| |Null| | |5|ENTRPRS_SE_CODE|이메일|DATE| |Null| | === ERD === {{:egovframework:hyb:guide:ios:erd.jpg|}} === 표준 보안 API === public String verifyCert(PKIAndroidAPIVO pkiVo) throws Exception { // API 초기화 GpkiApi.init("C:/libgpkiapi_jni/conf"); String sign; sign = pkiVo.getSign(); return verify(Base64.decode(sign)); } private String verify(final byte[] bSignedData) { String sClientName = ""; try { // 서명값을 검증 SignedData signedData = null; signedData = new SignedData(); signedData.verify(bSignedData); // 서명자의 인증서 검증을 위해서 서버의 서명용 인증서 획득 X509Certificate clientCert = null; clientCert = signedData.getSignerCert(0); // 인증서 검증 CertPathValidator certPathValiditor = null; certPathValiditor = new CertPathValidator("C:/libgpkiapi_jni/conf/gpkiapi.conf"); // 신뢰하는 최상위 인증서 추가 X509Certificate rootCertRsa = null; rootCertRsa = Disk.readCert("C:/libgpkiapi_jni/conf/root-rsa2.der"); X509Certificate rootCertRsaSha = null; rootCertRsaSha = Disk.readCert("C:/libgpkiapi_jni/conf/root-rsa-sha2.der"); certPathValiditor.addTrustedRootCert(rootCertRsa); certPathValiditor.addTrustedRootCert(rootCertRsaSha); // 클라이언트의 인증서 검증 범위 설정 certPathValiditor.setVerifyRange(CertPathValidator.CERT_VERIFY_FULL_PATH); // 클라이언트의 인증서 폐지여부 확인 설정 (CRL/ARL 검증 설정함) certPathValiditor.setRevokationCheck(CertPathValidator.REVOKE_CHECK_ARL | CertPathValidator.REVOKE_CHECK_CRL); // 인증서 검증 요청 certPathValiditor.validate(CertPathValidator.CERT_SIGN, clientCert); sClientName = clientCert.getSubjectDN(); } catch (Exception e) { sClientName = ""; } return sClientName; } ===== 환경설정 ===== NPKI 디바이스API 가이드 프로그램에서 제공하는 모바일 디바이스의 NPKI 관련 기능을 활용하기 위하여 필요한 항목 및 그 환경 설정은 다음과 같다. ==== Device Application ==== === res/xml/config.xml === === res/values/serverinfo.xml === http://192.168.100.222:8080/DeviceAPIGuideTotal_Web_V1.7.1 === AndroidManifest.xml === ==== Server Application ==== === pom.xml === egovframework.com.cmm.uat libgpkiapi_jni 1.4.0.0 === resource/egovframework/sqlmap/sql-map-config_[DB명].xml === * 표준 보안 API 설정 ^구분^설정방법^ |Class 경로 설정|방법 1. java 옵션 이용 : java -classpath jar_directory\libgpkiapi_jni.jar \\ 방법 2. 환경 변수 등록 : "내컴퓨터->속성->고급->환경변수" 에서 새로 만들기를 클릭하여 classpath 변수를 등록| {{:egovframework:hyb:hrte:NPKIClassPath.jpg}} ^구분^설정방법^ |라이브러리 경로 설정|1. JNI를 비롯한 C/C++용 표준보안API와 LDAP 라이브러리가 위치해 있는 경로를 환경 변수에 등록한다. \\ 2. "내컴퓨터->속성->고급->환경변수" 에서 기존 "path" 변수에 "라이브러리가 설치된 디렉토리"를 추가한다.| {{:egovframework:hyb:hrte:NPKIPath.jpg}} ===== 관련기능 ===== NPKI 디바이스 API 가이드는 크게 ** 모바일 기기 인증서 선택/인증하기 **, ** 인증 로그 정보 보기 ** 기능으로 구성되어있다. ==== 모바일 기기 인증서 선택/인증하기 ==== === 비즈니스 규칙 === 디바이스 API를 통해 모바일 기기에 저장된 인증서 리스트를 조회하고, 리스트에서 선택 한 인증서로 인증서 인증을 한다. === 관련코드 === 디바이스 API 내의 인증서 리스트 조회 함수를 사용하는 JavaScript 코드를 통해 인증서 리스트를 조회 하고, 서명 데이터를 만드는 JavaScript 함수를 사용하여 서명 한다. // 인증서 리스트 조회 function fn_egov_go_certlist() { console.log('DeviceAPIGuide fn_egov_go_certlist'); WizSignPG.getCertificates(fn_egov_getcertlistSuccess,fn_egov_getcertlistFail); } // 인증서 비밀번호 확인 function fn_egov_confirm_password() { console.log('DeviceAPIGuide fn_egov_confirm_password'); var args = new Array(); args[0] = Number(document.getElementById("xsigncertindex").value) + 1 args[1] = $("#loginPasswd").val(); WizSignPG.verifyCertPassword(args, function(result) { console.log('DeviceAPIGuide fn_egov_confirm_password Success'); //Certificates var runResult = result['result']; var error = result['errMsg']; if(error!=null){ alert(error); alert(runResult); } if(runResult == 'OK') { alert('인증서 비밀번호가 일치합니다.'); fn_egov_make_sign(); } }, function(error) { console.log('DeviceAPIGuide fn_egov_confirm_password Fail'); alert("Error: \r\n" + error['errMsg']); }); } // 인증서 서명 function fn_egov_make_sign() { console.log('DeviceAPIGuide fn_egov_make_sign'); var args = new Array(); args[0] = Number(document.getElementById("xsigncertindex").value) + 1 args[1] = $("#loginPasswd").val(); args[2] = "usrId=&password=&name="; WizSignPG.doSignature(args, fn_egov_makesign_ok, fn_egov_makesign_fail); } // 인증서 서명 데이터 서버로 인증 요청 function fn_egov_makesign_ok(arg) { console.log('DeviceAPIGuide fn_egov_makesign_ok Success'); var jsonobj = JSON.parse(arg); // jsonobj.sign에서 서면 값, jsonobj.vidRandom에서 본인확인을 위한 VID Random값을 가져올 수 있다. var signedData = jsonobj.sign; var url = "/pki/xml/addPKIInfo.do"; var acceptType = "xml"; var params = {uuid : device.uuid, sign: signedData, entrprsSeCode: 'PKI02'}; alert('Http Method:POST\nacceptType:'+ acceptType + '\n요청데이터:' + JSON.stringify(params)); // get the data from server window.plugins.EgovInterface.post(url,acceptType, params, function(xmldata) { console.log('DeviceAPIGuide fn_egov_makesign_ok request Complete'); alert('응답데이터:' + xmldata) if($(xmldata).find("resultState").text() == "OK"){ window.history.go(-2); }else{ jAlert($(xmldata).find("resultMessage").text(), '오류', 'c'); } }); } === 관련화면 및 수행매뉴얼 === ^Action^URL^Controller method^QueryID^ |인증서 인증|/pki/xml/addPKIInfo.do|addPKIInfoXml|"PKIAndroidAPIDAO.insertPKIInfo"| ^인증서 리스트^인증서 인증^ |{{:egovframework:hyb:guide:add:NPKI인증서리스트(WizSign).png?320}}|{{:egovframework:hyb:guide:add:NPKI인증로그(WizSign).png?320}}| 인증서 리스트 화면에서 인증 할 인증서를 선택하고 인증서 인증 화면에서 PASSWD 항목에 패스워드를 입력 후 "인증 확인" 버튼을 클릭한다. \\ 단, PASSWD 항목에서 validation을 확인하고, 조건이 불충분 할 경우 오류 메시지가 출력된다. 인증 확인 : 인증서 인증을 하기 위해서 PASSWD 항목에 인증서 패스워드를 입력 후 "인증 확인" 버튼을 클릭한다. \\ Back 버튼 : **NPKI 디바이스 API 가이드 프로그램 메뉴** 화면 또는 **인증서 리스트** 화면으로 이동한다. \\ ==== 인증 로그 정보 보기 ==== === 비즈니스 규칙 === 웹 서버 어플리케이션으로 부터 인증서 인증 결과 로그를 조회한다. \\ === 관련코드 === function fn_egov_go_loginInfoList() { console.log('DeviceAPIGuide fn_egov_go_loginInfoList'); //3G 사용시 과금이 발생 할 수 있다는 경고 메시지 표시 if(!fn_egov_network_check(false)) { return; } $.mobile.changePage("#loginInfoList", "slide", false, false); var url = "/pki/xml/pkiInfoList.do"; var accept_type = "xml"; // get the data from server window.plugins.EgovInterface.post(url,accept_type, null, function(xmldata) { console.log('DeviceAPIGuide fn_egov_go_loginInfoList request Complete'); var list_html = ""; $(xmldata).find("pkiInfoList").each(function(){ var dn = $(this).find("dn").text(); var date = $(this).find("crtfcDt").text(); var entrprsSeCode = $(this).find("entrprsSeCode").text().replace(/\s+$/, ""); var entrprsSe = "NONE"; if(entrprsSeCode == 'PKI01') entrprsSe = "MagicXSign"; else if(entrprsSeCode == 'PKI02') entrprsSe = "WizSign"; else if(entrprsSeCode == 'PKI03') entrprsSe = "XecureSmart"; list_html += "
  • subjdn : " + dn + "

    "; list_html += "

    Date : " + date + "

    "; list_html += "

    NPKI : " + entrprsSe + "

  • "; }); var theList = $('#theLogList'); theList.html(list_html); theList.listview("refresh"); setTimeout(loadiScrollList, 1000); }); }
    === 관련화면 및 수행매뉴얼 === ^기능^URL^Controller^method^QueryID^ |인증서 인증 결과 로그 조회|/pki/xml/pkiInfoList.do|EgovPKIAndroidAPIController|selectPKIInfoListXml|PKIAndroidAPIDAO.selectPKIInfoList| {{:egovframework:hyb:guide:add:NPKI인증로그(WizSign).png?320|}} ===== 컴파일 디버깅 배포 ===== ==== 컴파일 ==== === NPKIAPI(WizSign) Device Applicaton 컴파일 방법 === * 디바이스 API 가이드(Android) 프로젝트를 마우스 오른쪽 버튼으로 클릭 후 "Run As"탭의 "Android Application"을 클릭하면 가이드 프로그램이 빌드되어 안드로이드 디바이스에 설치 된다. {{:egovframework:hyb:guide:Gettingstart_AVDRunAs.png|}} \\ * "Android Device Chooser" 창이 나타나면 해당 디바이스를 선택 후 "OK" 버튼을 선택한다. {{:egovframework:hyb:guide:Gettingstart_DeviceChooser.png|}} \\ * 에뮬레이터를 이용한 실행 화면 {{:egovframework:hyb:guide:add:WizSignEmuleIntro.png?320|}} {{:egovframework:hyb:guide:add:WizSignEmuleMain.png?320|}} * 디바이스를 이용한 실행 화면 {{:egovframework:hyb:guide:add:WizSignIntro.png?320|}} {{:egovframework:hyb:guide:add:WizSignMain.png?320|}} === NPKIAPI(WizSign) Server Applicaton 컴파일 방법 === * NPKIAPI(WizSign) 서버사이드 가이드 프로그램의 실행은 프로젝트를 마우스 오른쪽 버튼을 클릭 한후 Run As>Run On Server 버튼을 통해 실행 할 수 있다. {{:egovframework:hyb:guide:ios:서버실행.png?640|}} * 빌드가 성공적으로 수행 되면 이클립스의 콘솔 창에서 'Server Startup in xxx ms' 메시지를 확인 할 수 있다. {{:egovframework:hyb:guide:add:서버실행결과_콘솔.png?840|}} ==== 디버깅 ==== 디바이스 어플리케이션에서 발생한 오류 내용 확인 및 디버깅을 위해서는 폰갭 프레임워크에서 제공하는 console.log를 이용할 수 있다. console.log 함수는 자바스크립트 구문에서 사용할 수 있는 디버그 코드로 이클립스에서 확인 할 수 있다. console.log의 작성 방법은 다음과 같다. function fn_egov_getcertlistSuccess(result) { console.log('DeviceAPIGuide fn_egov_getcertlistSuccess Success'); g_certList = result['Certificates']; var list_html = ""; .... } 디버깅 코드가 실행 되면 아래와 같은 메시지를 개발도구의 콘솔 메시지 창에서 볼 수 있다. {{:egovframework:hyb:guide:add:FileReadWriteconsolelog.png?700|}} NPKI 디바이스 API 가이드 프로그램 에서는 디버깅을 위하여 다음과 같이 콘솔 정보를 출력한다. \\ ^디버그 코드^디버깅 내용^ |DeviceAPIGuide fn_egov_getcertlistSuccess Success | 인증서 리스트 조회 성공 시| |DeviceAPIGuide fn_egov_getcertlistFail Fail | 인증서 리스트 조회 실패 시| |DeviceAPIGuide fn_egov_confirm_password Success | 인증서 비밀번호 확인 성공 시| |DeviceAPIGuide fn_egov_confirm_password Fail | 인증서 비밀번호 확인 실패 시| |DeviceAPIGuide fn_egov_makesign_ok Success | 인증서 서명 성공 시| |DeviceAPIGuide fn_egov_makesign_fail Fail | 인증서 서명 실패 시| |DeviceAPIGuide fn_egov_makesign_ok request Complete | 웹 서버 어플리케이션으로 부터 인증서 인증 성공 시| |DeviceAPIGuide fn_egov_go_loginInfoList request Complete | 인증서 인증 로그 정보 조회 성공 시| ==== 배포 ==== NPKI(WizSign) 디바이스 API 가이드 다운로드 : [[http://www.egovframe.go.kr/cop/bbs/selectBoardArticle.do?bbsId=BBSMSTR_000000000161&nttId=536&menu=3&submenu=9|Click]] \\ ===== 참고자료 ===== * UX/UI 라이브러리 : jQuery Mobile[[http://jquerymobile.com/demos/1.3.2/|Click]] \\ * Phonegap 2.9.0 : [[http://docs.phonegap.com/en/2.9.0/|Click]] \\ * 표준보안API : [[http://www.gpki.go.kr/|Click]] \\