Page No. 

작성자 :   / 검수자 :  


 Launch Release No. 7.3.500.20250722 / Latest Release No. 

※ 주의 : 외부 포탈 임베디드(Project)방식의 SSO연동을 적용하기 위해 '1-0.공통 설정' 과정을 선행으로 설정해야 함


− 개요

> 외부 포탈 사이트에서 AUD7 보고서를 임베디드 방식으로 연동하기 위한 샘플 프로젝트
> Spring Boot(백엔드)에서 AUD7 서버와 인증을 처리하고,
React 또는 Vue(프론트엔드)가 보고서 뷰어 UI를 제공
> 단 , 일부 기능이 크로스 도메인 block으로 처리 불가할 수 있음

   (top , parent 접근 불가하여 postMessage 형식 등으로 커스텀 개발이 AUD플랫폼 내 적용되어야 함)


− 제약 사항

> 기본적으로 AP 토큰이 쿠키에 공유되어 사용되기 때문에 외부 PORTAL (타 사이트 포탈) 과 AUD7 플랫폼 PORTAL의 Domain name이 동일해야 된다.
> 외부 POTAL에서는 발급된 AP 인증 토큰이 정상적으로 브라우저 Cookie bimatrix_ap_accessToken으로 설정되어 있는지 확인이 필요하다.



1. 샘플 코드(sitePortalAUD7EmSample.jsp) 설정

1-1) 인증 정보 설정

1-1-1) audSecretKey, audApId 설정

> SSH Key정보를 sitePortalAUD7EmSample.jsp에 설정
   
   < 그림 1-1. 샘플 코드 인증 정보 설정 캡처 1 >

1-1-2) privateKey 설정 - 고객사 포탈 서버에 private_key.pem을 저장하고 경로를 지정

> loadPrivateKey 메서드 매개변수에 '인증 키 관리' 페이지에서 등록이 완료되면 발급되는 private_key.pem 파일의 위치를 설정
   
   < 그림 1-2. 샘플 코드 인증 정보 설정 캡처 2 >

1-2) 인증 대상 유저 코드 설정

1-2-1) userCode 설정

> 실제 사이트에서 인증 시켜야 할 계정 값을 설정
   (※ 주의 : 아래 샘플 코드엔 matrix로 고정된 값으로 구현했지만, 실제 구현 시 userCode는 유동적으로 변경하여 인증 과정을 실행해야 함)
   
   < 그림 1-3. 샘플 코드 인증 정보 설정 캡처 3 >

1-3) AUD 인증 AP 토큰 요청 및 도메인 설정

1-3-1) AUD_AP_TOKEN_URL 설정

> AUD플랫폼 경로 설정 (Ex. "http(s)://[IP:PORT+Context Root]/api/auth/sign/ap/token")
   (※ 주의 : 서버 통신 방식이기 때문에 IP:PORT를 통해 AUD플랫폼 Portal접속이 가능하면 설정하고, 도메인 URL통신만 가능하다면 해당 서버에서 도메인 통신 확인 후 진행)
   
   < 그림 1-4. 샘플 코드 인증 정보 설정 캡처 4 >

1-3-2) AUD_AP_TOKEN_UPDATE_URL 설정

> 쿠키에 발급한 AUD 인증 AP 토큰을 공유하기 위한 메인 도메인 설정.
   (※ 참고 : 서브 도메인 허용, 컨테이너 허용, PORT 허용)
   
   < 그림 1-5. 샘플 코드 인증 정보 설정 캡처 5 >

- AUD 인증 AP 토큰 발급 API는 AUD 플랫폼에 등록한 Application용 클라이언트 아이디와 클라이언트 시크릿를 인증 정보로 설정하여 Application 인증 JWT 토큰을 발급 합니다.

      • 클라이언트에서 해당 인증 토큰 발급은 제한됩니다. 보안상 클라이언트 인증 정보가 확인될 소지 방지.
      • 타 시스템 포탈에서 최초 1회 인증 토큰 발급 후 만료되었거나 유효하지 않은 토큰일 경우 클라이언트 아이디와 클라이언트 시크릿 정보를 이용하여 인증 토큰을 재발급 합니다.
      • 발급한 토큰은 타 시스템 쿠키에 등록하여 사용합니다 . (쿠키 key = bimatrix_ap_accessToken)
요청 URL메서드Header 설정응답 형식설명

{AUD서버 주소}/api/auth/sign/ap/token

POST

서버 영역에서 API 호출 시에 Request Header로 설정하여 전달

Key설명
X-AUD-AP-Id애플리케이션 클라이언트 아이디값
X-AUD-AP-Secret-SSH

애플리케이션 클라이언트 시크릿값

      • AUD7 플랫폼 발급한 ssh private pem 파일을 이용하여 전달받은 시크릿 Key에 서명을 한 후에 전달하여 토큰 발급 요청
X-AUD-USER
      • Application용 아이디가 아닌 타 시스템에서 로그인 한 사용자로 인증 토큰 발급받아 사용 시에 세션 사용자 아이디 설정
      • 해당 사용자도 AUD 플랫폼 사용자에 등록된 id만 가능
X-AP-UPDATE-ADDR
      • 설정 도메인 (쿠키에 토큰 공유를 위한 도메인 정보)
      • 서브 도메인 , 포트는 달라도 무방함


String

AUD 플랫폼에서 발급된 SSH Private.pem 인증서를 이용하여 Secret Key를 서명한 후에 Header에 Secret Key를 설정하여 전달하여 인증 후 전달된 사용자 또는 클라이언트 아이디로 AUD 플랫폼에서 사용 가능한 인증 토큰 발급.

해당 JWT 인증 토큰을 통해 AUD 플랫폼의 기능 연동을 지원


2. aud.embedded.setting.jsp 설정 - sitePortalAUD7EmSample.jsp에서 참조하는 Config파일을 설정


< 그림 1-6. 샘플 코드의 Config 참조 캡처 >

2-1) AUD_CONFIG_DATA 설정 - sitePortalAUD7EmSample.jsp에서 참조하는 Config파일 에서 설정

- bimatrix_server_url 설정 : AUD플랫폼의 IP:PORT + Context Root로 설정
- webRoot 설정 : 고객사 포탈 임베디드 소스가 위치한 경로를 설정

※ Admin 시스템 관리 > 시스템 옵션 > [시스템 실행 옵션]의 WEBROOT 값을 통해 확인 가능합니다.

- cookie_domain 설정 : 토큰을 공유하기 위한 도메인 설정

임베딩의 기본 전제 조건은 고객사 포털과 임베딩할 AUD7의 서브도메인은 달라도 메인 도메인이 같아야 합니다.

ex) 고객사 포탈 도메인: portal.client.com, AUD 제품 포탈 도메인: aud7.client.com

       DATA.cookie_domain = .client.com;


  
   < 그림 1-7. 샘플 코드 Config 설정 캡처 >

3. AUD보고서 iFrame 임베디드 방법

> openReport 함수를 사용하여 'REPORT_AUD'라는 iFrame에 i-AUD 보고서를 임베디드
   
   
   < 그림 1-8. 샘플 코드 보고서 호출부 캡처 >

spring:
  thymeleaf:
    prefix: classpath:/templates/
    check-template-location: true
    suffix: .html
    mode: HTML
    cache: false # default true, 개발 시에는 false로 두는 것이 좋음


server:
  port: 9995
  #ssl:
  #  key-store: classpath:keystore.p12
  #  key-store-type: PKCS12
  #  key-store-password: 123456

#  servlet:
#    session:
#      cookie:
#        http-only: true
#        secure: false

aud:
  server-url: http://aud-local.bimatrix.com:8087/matrix
  x-ap-update-addr: aud-local.bimatrix.com
  x-aud-ap-id: matrix
  x-aud-ap-secret-key: C558A12512744C80A3795354427B47C8
  ssh-key-path: D:\\document\\업무\\15. claude 활용\\spring-embedded\\private_key.pem




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

    var AUD_CONFIG_DATA = {};
    try {
        AUD_CONFIG_DATA.bimatrix_server_url = "http://[AUD플랫폼 Ip:Port]";
        AUD_CONFIG_DATA.webRoot = "/matrix";
        AUD_CONFIG_DATA.cookie_domain = ".bimatrix.com";

        AUD_CONFIG_DATA.global_params = {} ;
        var setGlobalParams = function(datas) {
            if(typeof datas == "string"){
                AUD_CONFIG_DATA.global_params = JSON.parse(datas);
            }
        }

        /** 제공되는 버튼 id list
         * btnEdit : 보고서 편집
         * btnRefresh : 실행
         * btnSaveAs : 다른 이름으로 저장
         * btnExport : 내보내기
         * btnPrint : 출력
         * btnProperties : 속성 (i-Matrix 전용)
         * btnScreenArrange : 화면 arrange (i-Matrix 전용)
         **/
        AUD_CONFIG_DATA.button_disable_ids = "btnEdit;btnSaveAs";

        // i-AUD 제품 설정 정보

        // i-Matrix 제품 설정 정보
        AUD_CONFIG_DATA.imatrix_afterOpenRefresh = "false";
        AUD_CONFIG_DATA.imatrix_mxserviceVersion = "106";
        AUD_CONFIG_DATA.imatrix_used_bottom = "N";
        AUD_CONFIG_DATA.imatrix_bottom_foot_margin = "1"; // foot 영역 margin
        AUD_CONFIG_DATA.imatrix_bottom_top_margin = "40"; // top 영역 margin

    } catch (e) {
        AUD_CONFIG_DATA = {};
        alert("aud.embedded.setting.jsp : " + e.message);
    }