<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html lang="ko">
<head>
<title>Pass-Ni SSO Agent 가이드</title>
<meta charset="utf-8" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport" />

<link rel="icon" href="img/favicon.ico"  />
<link rel="stylesheet" href="css/guide.css" />

<script type="text/javascript" src="js/jquery-3.6.3.min.js"></script>

<script type="text/javascript">

$(function() {
	
	$('[id^="content"]').hide();
	$('#content1').show();
	
});

function fnLink(no) {
	
	$('[id^="content"]').hide();
	$('#content'+no).show();
}

</script>

</head>
<body>

<header class="top_bg">
	<div class="header_wrap">
		<h1>유비앤티스랩</h1>
		<ul class="utility">
			<li>Pass-Ni SSO Agent API</li>
		</ul>
	</div>
	
</header>

<div class="contents_wrap">

	<div class="sub_nav ani">
		<ul class="sub_nav_inner">
			<li>
				<a href="javascript:fnLink('1');">오류 코드</a>
			</li>
			<li>
				<a href="javascript:fnLink('2');">SSO 코드 요청</a>
			</li>
			<li>
				<a href="javascript:fnLink('3');">인증토큰 요청</a>
			</li>
			<li>
				<a href="javascript:fnLink('4');">사용자정보 요청</a>
			</li>
			<li>
				<a href="javascript:fnLink('5');">로그인 체크</a>
			</li>
			<li>
				<a href="javascript:fnLink('6');">연동시스템 조회</a>
			</li>
		</ul>
	</div>
	
	<div class="sub_wrap">
		
		<div id="content1" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;오류 코드</h3>
			<div class="mt20 ml20">SSO 솔루션 이용 시 발생할 수 있는 오류 코드에 대한 목록입니다.</div>
			<div class="table-wrap td_left mt20">
				<table>
					<colgroup>
						<col style="width:13%;" >
						<col style="width:37%">
						<col style="width:13%;" >
						<col style="width:37%;" >
					</colgroup>
					<tbody>
						<tr>
							<th scope="row">코드</th>
							<th scope="row">설명</th>
							<th scope="row">코드</th>
							<th scope="row">설명</th>
						</tr>
						<tr>
							<td style="text-align: center;">EA0001</td>
							<td>(SSO 에이전트) 초기화 실패</td>
							<td style="text-align: center;">EA0002</td>
							<td>(SSO 에이전트) 필수 파라미터 정보 없음</td>
						</tr>
						<tr>
							<td style="text-align: center;">EA0003</td>
							<td>(SSO 에이전트) 서버와의 통신 오류</td>
							<td style="text-align: center;">EA0004</td>
							<td>(SSO 에이전트) 서버와의 통신 오류(예외사항)</td>
						</tr>
						<tr>
							<td style="text-align: center;">EA0005</td>
							<td>(SSO 에이전트) 암호화 키 교환 오류</td>
							<td style="text-align: center;">EA0006</td>
							<td>(SSO 에이전트) JSON 데이터 파싱 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">EA0007</td>
							<td>(SSO 에이전트) 서버에서 전달받은 데이터 오류</td>
							<td style="text-align: center;">EA0008</td>
							<td>(SSO 에이전트) 데이터 복호화 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">EA0009</td>
							<td>(SSO 에이전트) 데이터 서명 검증 오류</td>
							<td style="text-align: center;">EA0010</td>
							<td>(SSO 에이전트) 암화화 키 생성 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">EA0011</td>
							<td>(SSO 에이전트) ECC Key 생성 오류</td>
							<td style="text-align: center;">ES0001</td>
							<td>(SSO 서버) 실패</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0002</td>
							<td>(SSO 서버) 서버 초기화 오류</td>
							<td style="text-align: center;">ES0003</td>
							<td>(SSO 서버) 필수 파라미터 정보 없음</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0004</td>
							<td>(SSO 서버) 연동시스템 정보 없음</td>
							<td style="text-align: center;">ES0005</td>
							<td>(SSO 서버) 연동시스템 식별코드 정보 없음</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0006</td>
							<td>(SSO 서버) ECC Key 생성 오류</td>
							<td style="text-align: center;">ES0007</td>
							<td>(SSO 서버) 전자서명 데이터 생성 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0008</td>
							<td>(SSO 서버) 서버 공개키/개인키 정보 로드 오류</td>
							<td style="text-align: center;">ES0009</td>
							<td>(SSO 서버) 전자서명 검증 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0010</td>
							<td>(SSO 서버) 공유키 생성 실패[Calculate Key]</td>
							<td style="text-align: center;">ES0011</td>
							<td>(SSO 서버) 정상적인 요청이 아님[Challenge]</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0012</td>
							<td>(SSO 서버) 서버 ECC Key 정보 로드 오류</td>
							<td style="text-align: center;">ES0013</td>
							<td>(SSO 서버) 데이터 암호화 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0014</td>
							<td>(SSO 서버) 데이터 복호화 오류</td>
							<td style="text-align: center;">ES0015</td>
							<td>(SSO 서버) 사용자 정보 없음</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0016</td>
							<td>(SSO 서버) JSON 데이터 생성 오류</td>
							<td style="text-align: center;">ES0017</td>
							<td>(SSO 서버) 요청 정보 없음</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0018</td>
							<td>(SSO 서버) JSON 데이터 파싱 오류</td>
							<td style="text-align: center;">ES0019</td>
							<td>(SSO 서버) SSO 서버 시스템 오류</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0020</td>
							<td>(SSO 서버) 정상적인 요청이 아님</td>
							<td style="text-align: center;">ES0021</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[DATA]</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0022</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[SIGN]</td>
							<td style="text-align: center;">ES0023</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[ISS]</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0024</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[AUD]</td>
							<td style="text-align: center;">ES0025</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[IP]</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0026</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[BROWSER]</td>
							<td style="text-align: center;">ES0027</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[DATE]</td>
						</tr>
						<tr>
							<td style="text-align: center;">ES0028</td>
							<td>(SSO 서버) 올바르지 않은 인증 토큰 정보[SUB]</td>
							<td style="text-align: center;">ES0029</td>
							<td>(SSO 서버) 올바르지 않은 코드 정보[SSO_CODE]</td>
						</tr>
					</tbody>
				</table>
			</div>
		</div>
		
		
		
		
		
		
		
		
		<div id="content2" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;SSO 코드 요청</h3>
			<div class="mt20 ml20">SSO 코드 요청 명세</div>
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
// 인증 토큰으로 SSO 코드를 요청한다.
String com.ubintis.agt5.api.ApiAgentService.getSsoCode (String pni_token, String user_ip, String user_agent)

@param pni_token : 인증 토큰
@param user_ip : 사용자 아이피
@param user_agent : 사용자 User-Agent
@Return String : SSO 코드 

(ex) 64BD24FAE5CF244825AD67F89D78ED73

// SSO코드가 ""일 경우 getErrorCode() 메서드를 통해 오류코드 획득
String com.ubintis.agt5.api.ApiAgentService.getErrorCode()

@Return String : 오류 코드
					</pre>
				</li>
			</ul>
			<div class="mt20 ml20">SSO 코드 요청 예제</div>
			
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
String errorCode ="";
String pni_token = StrUtil.NVL( session.getAttribute( "pni_token" ) );

if( !"".equals( pni_token ) ) {
	String user_ip = request.getRemoteAddr();
	String user_agent = request.getHeader("User-Agent");

	ApiAgentService apiAgentService = new ApiAgentService ();
	String sso_code = apiAgentService.getSsoCode( pni_token, user_ip, user_agent );

	if( "".equals( sso_code ) ) {
		errorCode= apiAgentService.getErrorCode();
	}
}
					</pre>
				</li>
			</ul>
		</div>
		
		
		<div id="content3" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;인증토큰 요청</h3>
			<div class="mt20 ml20">인증 토큰 요청 명세</div>
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif;">
					
// SSO 코드로 인증 토큰을 요청한다.
String com.ubintis.agt5.api.ApiAgentService.getToken (String sso_code, String user_ip, String user_agent)

@param sso_code : SSO 코드
@param user_ip : 사용자 아이피
@param user_agent : 사용자 User-Agent
@Return String : 인증 토큰

(ex) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.N0M4OUQ0RDUxRjdCRDdEMTk1MjZCM0VCMkI4OTcxNzlBNzEzNzNBOUZCMzUwQTk3NzI3MzI3Q0Y2QTg5MTMxRUE0MTBCQzBBN0VBRT
FEODlFRTY3MDRDQkU2MDI2NUZFMzMzRjI3RDVEN0EzRTAyNjk2MEYyNzM0NkM0NzQzN0ZFODJCRDU0NzI5RDEwOTg3MDk1NDA0RkQ5OERGNEEyRjkyREUxQ0ZBQTdGNENDNTg2
OTU2MzU5Q0FGNEUwMDkyRkFBQkVCMzE3MkE4MDFCN0ZFNDAyOEQxRUU0NkRFRTBBODRERjBGRjc1OEVGNEU0RERERjFCQUIxNUI5MzY2MzUwNjg0NzI5QjdDNEE1NENBN0U3Nk
U1NEQ1M0EwQTdDOEVDNTM2QzkzNTREM0M5NzhFRDBGMzczOUFCNTNGNjU1RjlGNTNCQUM3NTY2QkYzQ0Y5REEyMzNEN0QyRUE4ODZBMzBCMjBFNDQ5M0EyOUIxM0JBMjQ4
ODBENjVGRjdC.M0Y3MEFGMzUyQjY4QThDQTJEOTM3RjdENzlCREJGQkQ3QTYxMTJCNEQ0MDZBNEY1NkY0OTEyOTcxMTZERDM2Rg

// 인증 토큰이 ""일 경우 getErrorCode() 메서드를 통해 오류코드 획득
String com.ubintis.agt5.api.ApiAgentService.getErrorCode()

@Return String : 오류 코드
					</pre>
				</li>
			</ul>
			<div class="mt20 ml20">인증 토큰 요청 예제</div>
			
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
String errorCode = "";
String sso_code = StrUtil.NVL( request.getParameter( "sso_code" ) );

if( !"".equals( sso_code ) ) {
	String user_ip = request.getRemoteAddr();
	String user_agent = request.getHeader("User-Agent");

	ApiAgentService apiAgentService = new ApiAgentService ();
	String sso_code = apiAgentService.getToken( sso_code, user_ip, user_agent );

	if( "".equals( sso_code ) ) {
		errorCode= apiAgentService.getErrorCode();
	}
}
					</pre>
				</li>
			</ul>
		</div>
		
		
		<div id="content4" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;사용자정보 요청</h3>
			<div class="mt20 ml20">사용자 정보 요청 명세</div>
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif;">
					
// 인증 토큰으로 사용자 정보를 조회한다.
String com.ubintis.agt5.api.ApiAgentService.getUserData (String pni_token, String user_ip, String user_agent)

@param pni_token : 인증 토큰
@param user_ip : 사용자 아이피
@param user_agent : 사용자 User-Agent
@Return JSON String : 사용자 정보

(ex) {"user_id":"ssotest"
	  ,"user_nm":"테스트"
	  ,"user_mbtlnum":"010-1234-1234"
	  ,"user_email":"ssotest@passni.com"
	  ,"user_data":null}

// 사용자 정보가 ""일 경우 getErrorCode() 메서드를 통해 오류코드 획득
String com.ubintis.agt5.api.ApiAgentService.getErrorCode()

@Return String : 오류 코드
					</pre>
				</li>
			</ul>
			<div class="mt20 ml20">사용자 정보 요청 예제</div>
			
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
String errorCode = "";
String pni_token = StrUtil.NVL( session.getAttribute( "pni_token" ) );

if( !"".equals( pni_token ) ) {
	String user_ip = request.getRemoteAddr();
	String user_agent = request.getHeader("User-Agent");

	ApiAgentService apiAgentService = new ApiAgentService ();
	String user_data = apiAgentService.getUserData( pni_token, user_ip, user_agent );

	if( "".equals( user_data ) ) {
		errorCode= apiAgentService.getErrorCode();
	}
}
					</pre>
				</li>
			</ul>
		</div>
		
		<div id="content5" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;로그인 체크</h3>
			<div class="mt20 ml20">로그인 체크 명세</div>
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif;">
					
// 인증 토큰으로 로그인 체크를 한다.
String com.ubintis.agt5.api.ApiAgentService.getLoginCheck (String pni_token)

@param pni_token : 인증 토큰
@Return JSON String : 로그인 체크 결과 정보

(ex) {"code":"SS0001"}
(ex) {"code":"SS0007","data":"192.168.124.163"} // data는 중복로그인 아이피

// "SS0001" : 정상 로그인, "SS0007" : 중복로그인, 이 외 값 : 로그아웃 상태
					</pre>
				</li>
			</ul>
			<div class="mt20 ml20">로그인 체크 예제</div>
			
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
String pni_token = StrUtil.NVL( session.getAttribute( "pni_token" ) );

if( !"".equals( pni_token ) ) {
	ApiAgentService apiAgentService = new ApiAgentService ();
	String result_data = apiAgentService.getLoginCheck( pni_token );
}
					</pre>
				</li>
			</ul>
		</div>

		<div id="content6" class="sub_content_wrap">
			<h3 class="sub_s_title">&nbsp;연동시스템 조회</h3>
			<div class="mt20 ml20">연동시스템 조회 명세</div>
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif;">
					
// 연동시스템 목록을 조회한다. (자기 자신은 제외)
String com.ubintis.agt5.api.ApiDataService.getAgentList ()

@Return JSON String : 연동시스템 목록, 연동시스템이 없을 경우 "none"을 리턴

(ex) [{"agt_nm":"포탈시스템"
,"agt_id":"sso-portal"
,"sso_url":"https://pot.passni.com /passni5/sample/login_proc.jsp"}]

-	agt_id(연동시스템 아이디)
-	agt_nm(연동시스템 명)
-	sso_url(SSO 연동 URL)

// 연동시스템 목록 정보가 ""일 경우 getErrorCode() 메서드를 통해 오류코드 획득
String com.ubintis.agt5.api.ApiDataService.getErrorCode()

@Return String : 오류 코드
					</pre>
				</li>
			</ul>
			<div class="mt20 ml20">연동시스템 조회 예제</div>
			
			<ul class="qna_wrap mt20">
				<li>
					<pre style="font-family:NotoSansKR,NanumSquare,sans-serif">
					
String errorCode = "";
ApiDataService apiDataService = new ApiDataService ();
String strAgentList = apiDataService. getAgentList();

if( "".equals(strAgentList ) ) {
	errorCode= apiDataService.getErrorCode();
}
					</pre>
				</li>
			</ul>
		</div>
		
	</div>
</div>

</body>
</html>