등록된 Application 정보로 AP 인증 토큰(bimatrix_ap_accessToken)을 발급 한 후 AUD 플랫폼에서 제공하는 Rest API 호출 및 보고서 연동 기능.
타 시스템에서 AUD 플랫폼에서 제공하는 보고서 및 PORTAL을 임베디드 형식으로 구성이 가능합니다.
- 타 시스템과 AUD 플랫폼의 도메인 주소가 다르더라도 CORS 등록된 Application 도메인인 경우에는 CORS 형태로 외부 타 시스템에 임베디드 처리 가능.
SSO 인증을 위한 AUD 플랫폼에 설정할 항목
1. AUD7 플랫폼 Admin 에서 연동(인증)용 타 시스템 서버 정보 등록
- 시스템 관리 > 시스템 옵션 > 시스템 사용 옵션 탭 클릭
- SSO_AUTH_IP 검색 . 해당 코드가 존재 할 경우에 값에 서버 IP 추가 (여러개 등록 시 세미콜론(;) 으로 구분자 처리)
- SSO_AUTH_IP 코드가 없을 경우 신규 버튼 클릭 > 신규로 생성된 row의 코드에 SSO_AUTH_IP 추가 후 값 항목에 서버 IP 등록
- 등록 후에 저장 버튼 클릭
2. AUD 플랫폼 Admin에서 Application (타 시스템) 용 인증 유저 등록
- 계정 관리 > 사용자 관리 > 사용자를 추가하여 등록
- 현재는 일반 AUD 플랫폼 사용자용 화면에서 등록하지만 추후 Application 인증 등록 화면에서 설정 예정
- 등록된 유저 정보를 확인하여 타 시스템에서 토큰 발행 시 인증 정보로 제공한다.
3. AUD 플랫폼 서버에 CORS Allowed origin url 등록
- AUD플랫폼서버 설치 경로/WEB-INF/classes/framework/service/service_api.properties 확인
- matrix.prop.location=true 되어 있고 matrix.prop.location.path에 경로가 지정되 있을 경우 해당 경로로 가서 service_api.properties 파일을 수정.
- 인증 할 타 시스템 주소 등록 . 브라우저에서 호출 될 때 Header에 설정된 Origins URL (원격 주소) 을 등록
- matrix.cross.origin.allowed 에 타사 연동 PORTAL URL 추가
# cross origin 허용 url (여러개의 주소를 설정할 경우 구분자는 콤마) matrix.cross.origin.allowed=http://1.1.1.1,https://2222:8080/XXX,http://a.co.kr
- service_api.properties 수정 후에 AUD 플랫폼 서버 재기동 하여야 적용이 완료됩니다.
AP 인증 토큰 발급 API
1. AUD 플랫폼에 등록한 Application용 클라이언트 아이디와 클라이언트 시크릿를 인증 정보로 설정하여 Application 인증 JWT 토큰 발급
- 클라이언트에서 해당 인증 토큰 발급은 제한됩니다. 보안상 클라이언트 인증 정보가 확인될 소지 방지.
- 타 시스템 포탈에서 최초 1회 인증 토큰 발급 후 만료되었거나 유효하지 않은 토큰일 경우 클라이언트 아이디와 클라이언트 시크릿 정보를 이용하여 인증 토큰을 재발급 합니다.
- 발급한 토큰은 타 시스템 쿠키에 등록하여 사용합니다 . (쿠키 key = bimatrix_ap_accessToken)
요청 URL | 메서드 | Header 설정 | 응답 형식 | 설명 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{AUD서버 주소}/api/auth/sign/ap/token | POST | 서버 영역에서 API 호출 시에 Request Header로 설정하여 전달
| String | AUD 플랫폼에 등록한 클라이언트 아이디 값과 시크릿 값을 통해 인증 후 전달된 사용자 또는 클라이언트 아이디로 AUD 플랫폼에서 사용 가능한 인증 토큰 발급. 해당 JWT 인증 토큰을 통해 AUD 플랫폼의 기능 연동을 지원 |
2. 발급받은 AUD플랫폼 JWT 토큰을 타 시스템 내 쿠키에 설정하여 자동으로 토큰이 정상 토큰이면 갱신 가능.
Rest API 호출만으로 사용할 경우에는 호출시마다 Header에 설정하여 api 조회도 가능
클라이언트에서 API 호출 시에 CORS 옵션 추가하여 API 호출
ex) fetch를 통한 호출 시fetch(biServerUrl + apiUrl, { method: 'POST', // 또는 'POST', 'GET' headers: { 'Content-Type': 'application/json', 'bimatrix_ap_accessToken':'발급받은 AUD플랫폼 인증 JWT 토큰값' }, credentials: 'include', // 쿠키를 포함하여 요청하려면 사용 body: JSON.stringify(params) }) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); // 응답을 JSON으로 변환 }) .then(data => { alert(JSON.stringify(data)); }) .catch(error => { console.error('There has been a problem with your fetch operation:', error); alert('데이터를 가져오는데 실패했습니다.'); });
외부 PORTAL 적용 파일
aud 폴더 기본 기능
1. iaud_main.jsp
i-AUD 보고서 연동에 필요한 AUD7 플랫폼용 기능 jsp . 필요에 따라서 수정은 가능하나 기본적으로 배포한 기능대로 사용
외부 Portal 에서 생성한 iFrame 영에 내에 설정되는 i-AUD main 기능입니다
2. setAUD7TokenCookie.jsp
외부 Portal 에서 발급한 bimatrix_ap_accessToken의 값을 업데이트 시켜줄 경우에 AUD7 플랫폼에서 response에 setCookie로 처리가 안되기 때문에 실제 업데이트 된 Token을 외부 포탈의 특정 서비스로 전달하는 역할
3. imatrix_header.css
외부 Portal의 상단 title영역 및 버튼 영역을 설정할 때 사용하는 AUD7 플랫폼용 portal theme css 파일
외부 사이트에 맞게 수정하여 적용 가능합니다.
- sitePortalAUD7EmAudSample.jsp
외부 Portal 에서 AUD7 플랫폼의 i-AUD 제품을 연동하기 위한 샘플 소스
해당 샘플 소스를 참고하여 실제 외부 Portal 사이트에 맞게 개발하여 적용하면 됩니다.
샘플 코드의 수정 항목 정의 . 위 부분은 실제 샘플 소스이며 실 적용하는 소스에 맞게 구성하셔야 합니다.
<script> // AUD7 플랫폼 서버 주소 var biServerUrl = "http://aaa.bimatrix.co.kr:8087"; // 외부 Portal의 context root 경로 . 이 부분은 소스에 하드코딩 하여도 무방하며 손쉬운 관리를 위해서 적용 var webRoot = "/examples"; ........................ // 쿠키 설정 시에 domain의 정보를 외부 portal과 AUD7 플랫폼 서버와 동일하게 맞춰어야 쿠키가 동기화 되어 적용됩니다. var setCookie = function (cookie_name, value, days) { deleteCookie(cookie_name); var exdate = new Date(); exdate.setDate(exdate.getDate() + days); // 설정 일수만큼 현재시간에 만료값으로 지정 var cookie_value = escape(value) + ((days == null) ? '' : '; expires=' + exdate.toUTCString() + ';path=/;domain=bimatrix.co.kr'); document.cookie = cookie_name + '=' + cookie_value; } .......................................... /** * 실제 보고서 오픈에 활용되는 함수 * 전역 파라메터 설정이 필요한 경우에 아래 선언된 PARAM_ARR 변수에 적용 * iframe을 재사용 하는 경우와 최초 실행시에 전역 변수 설정 방식이 다르므로 확인하여 적용 **/ var openReport = function(code , isTileShow){ console.log("===reportCode:"+code); // AUD7 인증 확인 if (aud7AuthCheck()){ // VS_ , VN_에 대한 전역변수 Parameter 설정 var PARAM_ARR = []; var frm = $('#frm'); var REPORT_AUD = $('#REPORT_AUD')[0].contentWindow; AUD_VIEWER = $('#REPORT_AUD'); var okDispose = fnDisposeAudViewer(REPORT_AUD); if(okDispose) { // 기존 i-AUD iframe 재사용 //var base64UrlEncodedData = btoa(encodeURIComponent('파라메터전달Test')); //PARAM_ARR.push('VS_TEST='+base64UrlEncodedData); PARAM_ARR.push('VS_TEST=파라메터전달Test'); REPORT_AUD.AUD.SetCustomParams(PARAM_ARR); REPORT_AUD.fnOpen(code , isTileShow); fnSetViewerStatus('SD'); }else{ // i-AUD 최초 실행 fnPurgeIFRAME(AUD_VIEWER).then(function(){ AUD_VIEWER = $('<iframe id="REPORT_AUD" name="REPORT_AUD" width="100%" height="100%" frameborder="0" scrolling="no" class="HideFrame" ></iframe>'); var parent = $('.main_group'); parent.append(AUD_VIEWER); frm.attr({'target':'REPORT_AUD', 'action':webRoot+'/aud/iaud_main.jsp'}); frm.append('<input type="hidden" id="id" name="id" value="' + code + '" />'); frm.append('<input type="hidden" id="isTitle" name="isTitle" value="' + isTileShow + '" />'); frm.append('<input type="hidden" id="audServerUrl" name="audServerUrl" value="' + biServerUrl + '" />'); frm.append('<input type="hidden" id="webRoot" name="webRoot" value="' + webRoot + '" />'); frm.append('<input type="hidden" id="VS_TEST" name="VS_TEST" value="파라메터전달TEST" />'); frm.submit(); fnSetViewerStatus('SD'); }); } $('.main_group').removeClass('SiteHideFrame').addClass('SiteVisibleFrame'); } }