페이지 트리

버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

등록된 Application 정보로 AP 인증 토큰(bimatrix_ap_accessToken)을 발급 한 후 AUD 플랫폼에서 제공하는 Rest API 호출 및  보고서 연동 기능.

도움말
iconfalse

Start Release No : 7.0.500.202406XX 202411XX / Update Release No : -

    타 시스템에서 AUD 플랫폼에서 제공하는 보고서 및 PORTAL을 팝업이나 새창으로 오픈하여 사용이 임베디드 형식으로 구성이 가능합니다.

  • 타 시스템과 AUD 서버와 도메인이 상이하여도 새창으로 window.open 한 형식이라면 오픈이 가능하도록 구성되어 있습니다.플랫폼의 도메인 주소가 다르더라도 CORS 등록된 Application 도메인인 경우에는 CORS 형태로 외부 타 시스템에 임베디드 처리 가능.

정보
titleSSO 인증을 위한 AUD 플랫폼에 설정할 항목

1. AUD7 플랫폼 Admin 에서

SSO 연동할

연동(인증)용 타 시스템 서버

IP

정보 등록

  •  시스템 관리 > 시스템 옵션 > 시스템 사용 옵션 탭 클릭
  •  SSO_AUTH_IP 검색 . 해당 코드가 존재 할 경우에 값에 서버 IP 추가 (여러개 등록 시 세미콜론(;) 으로 구분자 처리)
  •  SSO_AUTH_IP 코드가 없을 경우 신규 버튼 클릭 > 신규로 생성된 row의 코드에 SSO_AUTH_IP 추가 후 값 항목에 서버 IP 등록
  •  등록 후에 저장 버튼 클릭

2. AUD 플랫폼 Admin에서 Application (타 시스템) 용 인증 유저 등록

  •  계정 관리 > 사용자 관리 > 사용자를 추가하여 등록
  •  현재는 일반 AUD 플랫폼 사용자용 화면에서 등록하지만 추후 Application 인증 등록 화면에서 설정 예정
  •  등록된 유저 정보를 확인하여 타 시스템에서 토큰 발행 시 인증 정보로 제공한다.

Image Added

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 파일을 수정.

- 타 연동 시스템에서 SSO 오픈 API 호출 시에 Request 인증 할 타 시스템 주소 등록 . 브라우저에서 호출 될 때 Header에 설정된 Origins URL을 URL (원격 주소) 을 등록

- matrix.cross.origin.allowed 에 타사 연동 PORTAL URL 추가

코드 블럭
languagebash
themeRDark
# cross origin 허용 url (여러개의 주소를 설정할 경우 구분자는 콤마)
matrix.cross.origin.allowed=http://1.1.1.1,https://2222:8080/XXX,http://a.co.kr
  • service_api.properties 수정 후에 AUD 플랫폼 서버 재기동 하여야 적용이 완료됩니다.


SSO 인증 로그인

AUD 플랫폼에서 제공하는 SSO 오픈 API에서 사용하는 요청 URL에 대한 정보입니다.

<%@ page contentType="text/html; charset=utf-8" language="java" %> <% String reportCode = request.getParameter("reportCode") == null ? "" : request.getParameter("reportCode"); String userCode = "nmpark"; String targetUrl = "/portal/Content.jsp"; if (reportCode != "") targetUrl = "/portal/Content.jsp?id="+reportCode; /** 1. AUD 플랫폼에서 이동할 페이지
정보
titleSSO 오픈API
AP 인증 토큰 발급 API

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

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

AUD 서버에 등록된 URL에서 호출한 SSO 인증 오픈 API 호출을 통해 AUD Portal 또는 보고서 연동하는 코드를 Jsp로 작성한 예입니다.

SSO 인증 오픈 API는 Form 형태 또는 Redirect 방식으로 호출하여야 파라메터로 전달한 AUD 서버의 Target URL로 전달됩니다.

코드 블럭
themeMidnight
요청 URL메서드파라메터Header 설정응답 형식설명

{AUD서버 주소}/api/auth/cssign/ssoap/token/publish?userId={사용자아이디}&targetUrl={오픈할 AUD서버 URL}

POST

query string

  • userId = AUD 플랫폼 내에 등록된 유저 아이디
  • targetUrl = AUD 플랫폼에서 이동할 페이지

    URL설명
    /portal/Content.jsp기본 AUD 포탈 URL
    /portal/Content.jsp?id={보고서코드}기본 AUD 포탈에서 전달받은 보고서가 오픈 URL
    /portal/popupView.jsp?id={보고서코드}팝업으로 보고서 오픈 URL
    -

    AUD 플랫폼에 등록된 IP 및 URL에서 호출

    userId를 통하여 SSO 인증 후에 access Token 발급받아 AUD 플랫폼에서 제공하는 보고서 또는 PORTAL 오픈

    도움말
    iconfalse
    title샘플 코드

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

    Key설명
    X-AUD-AP-Id애플리케이션 클라이언트 아이디값
    X-AUD-AP-Secret애플리케이션 클라이언트 시크릿값
    X-AUD-USER
    • Application용 아이디가 아닌 타 시스템에서 로그인 한 사용자로 인증 토큰 발급받아 사용 시에 세션 사용자 아이디 설정
    • 해당 사용자도 AUD 플랫폼 사용자에 등록된 id만 가능


    String

    AUD 플랫폼에 등록한 클라이언트 아이디 값과 시크릿 값을 통해 인증 후 전달된 사용자 또는 클라이언트 아이디로 AUD 플랫폼에서 사용 가능한 인증 토큰 발급.

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

    2. 발급받은 AUD플랫폼 JWT 토큰을 타 시스템 내 쿠키에 설정하여 자동으로 토큰이 정상 토큰이면 갱신 가능.

    •  

      Rest API 호출만으로 사용할 경우에는 호출시마다 Header에 설정하여 api 조회도 가능

      경고

      클라이언트에서 API 호출 시에 CORS 옵션 추가하여 API 호출
      ex) fetch를 통한 호출 시

      코드 블럭
      bordertrue
      languagejs
      themeMidnight
      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으로 변환
                
    보고서를
    •  
    오픈할
    •  
    경우, REPORT_CODE를 TARGET_URL의 PARAMETER로 넘겨 처리합니다.
    • })
                  .then(data => {
            
    1.1. 기본 포탈 오픈
    •           alert(JSON.stringify(data));
                  })
       
    targetUrl
    •  
    = "/portal/Content.jsp";
    •           .catch(error => {
            
    1.3. 팝업으로 보고서 오픈
    •           console.error('There has been a problem with your fetch operation:', error);
           
    targetUrl
    •  
    = "/portal/popupView.jsp?id="+reportCode; **/ // AUD 플랫폼에서 제공하는 SSO api url String AUD7SSOUrl = "https://rnd.bimatrix.co.kr/aud7/api/auth/cs/sso/token/publish?userId="+userCode+"&targetUrl="+targetUrl; %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache; no-store; no-save"> <meta http-equiv="Expires" content="-1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <script type="text/javascript"> function getInput(name, val)
    •           alert('데이터를 가져오는데 실패했습니다.');
                  }); 





    도움말
    iconfalse
    title샘플 코드

    Application 인증 토큰 발급을 위한 API 호출 자바 샘플 코드입니다.


    코드 블럭
    themeMidnight
    
    /**
     * AUD 플랫폼의 AP Token 발급 호출용 샘플 JAVA
     */
    public class AudGetApToken {
        private static final String AUD_AP_TOKEN_URL = "http://192.168.0.234:8088/matrix/api/auth/sign/ap/token";
    
        /**
         * audApId , audApPw 는 AUD 플랫폼에 등록한 Application 공통 계정을 사용
         * 파라메터로 전달 시에 암호화에 대한 처리하여 Application용 id / pw가 유출되지 않도록 구성
         */
        public static String getAPToken(String audApId , String audApPw , String userCode) {
            HttpURLConnection connection = null;
    
            try{
                if ((audApId == null || audApId.isEmpty()) || (audApPw == null || audApPw.isEmpty())){
                var input_id = document.createElement("input System.out.println("AUD 플랫폼에서 application 인증을 위한 id,pw에 대한 정보가 없습니다.");
                input_id.setAttribute("type", "hidden"    return null ;
                }
    
                // header 설정은 아래처럼 해주세요.
                Map<String, String> requestHeaders = new HashMap<>();
                requestHeaders.put("X-AUD-AP-Id", audApId);
                input_idrequestHeaders.setAttributeput("nameX-AUD-AP-Secret", nameaudApPw);
                input_id.setAttribute("value", valif (userCode != null || !userCode.isEmpty())
                    requestHeaders.put("X-AUD-USER" , userCode);
    
                return input_id;try{
             } 		      // URL 객체 function load(){생성
                    URL url = new URL(AUD_AP_TOKEN_URL);
                var form   connection = document.getElementById("frm"(HttpURLConnection) url.openConnection();
                form.setAttribute("method","post"}catch(MalformedURLException e){
                    System.out.println("AUD 플랫폼 주소가 잘못되었습니다.");
                form.setAttribute("action","<%=AUD7SSOUrl%>");
    			// 글로벌 변수 선업 방법 (VS_ , VN_ 으로 변수 이름을 시작하여 적용합니다)
    			//form.appendChild(getInput("VS_TEST", "SAMPLE DATA"));
        return null;
                }catch(IOException e){
                    System.out.println("연결이 실패했습니다 [api url:"+ AUD_AP_TOKEN_URL +"]");
                    return null ;
                }
    
                // HTTP 메서드 설정
                connection.setRequestMethod("POST");
                for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
                			form.submit()    connection.setRequestProperty(header.getKey(), header.getValue());
                }
        </script>
    	
    <body onload="load()">
    	<form id="frm" name="frm" method="post" action=""></form>
    </body>        // 응답 코드 확인
                int responseCode = connection.getResponseCode();
    
                System.out.println("Response Code: " + responseCode);
                if (responseCode == HttpURLConnection.HTTP_OK){
                    String apAccessToken = connection.getHeaderField("bimatrix_ap_accessToken");
                    if (apAccessToken == null){
                        System.out.println("ap token이 정상적으로 발급되지 않았습니다");
                        return null;
                    }
                    else{
                        return apAccessToken;
                    }
                }else if (responseCode == HttpURLConnection.HTTP_UNAUTHORIZED){
                    System.out.println("만료된 ap token 입니다.");
                    return null;
                }
    
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
    
            return null;
        }
    }