SSO 연계 서비스

개요

SSO 연계 서비스는 독립된 사이트간의 인증 공유를 위해 3rd party SSO 솔루션을 활용할 수 있는 인터페이스를 제공한다.

설명

3rd party SSO 솔루션을 활용하여 인증 서비스를 구축할 때 SSO 에이전트와 표준프레임워크 인증 시스템간의 인터페이스를 정의한다. 3rd party SSO 솔루션은 인터페이스 구현을 통해 표준프레임워크에서 인증 공유를 위한 SSO에이전트 기능을 사용할 수 있게 해준다.

패키지 참조 관계

SSO 연게 서비스는 요소기술의 공통(cmm) 패키지와 일반 로그인 패키지(uat.uia)에 대해서만 직접적인 함수적 참조 관계를 가지며 일반 로그인 패키지(uat.uia)에 포함되어 배포된다.

관련소스

유형대상소스명비고
Serviceegovframework.com.uat.uia.sso.service.EgovSSOService.javaSSO연계 서비스 인터페이스를 정의하는 클래스
Filteregovframework.com.uat.uia.sso.filter.EgovSSOLoginFilter.javaSSO서버와 연계를 통해 SSO 인증을 실행하는 필터 클래스
Filteregovframework.com.uat.uia.sso.filter.EgovSSOLogoutFilter.java로그아웃 요청시 SSO서버의 글로벌 로그아웃을 처리해 주는 필터 클래스

클래스다이어그램

구현예제

공통 컴포넌트 SSO 연계 서비스를 이용하여 국가대표포털 통합인증 시스템에 사용된 SSO 솔루션을 공통컴포넌트의 인증 시스템과 연동한 예제이며 상세 구현 예제는 아래와 같다.

example.zip

  • 통합 인증 서버에 인증된 토큰이 존재하는지 체크하는 메서드 구현
         /**
	 * SSO 통합 인증 서버에 인증여부를 확인 하는 메서드
	 * 
	 */
	public boolean hasTokenInSSOServer(ServletRequest request,
			ServletResponse response) {
		SSORspData rspData = ssoService.ssoGetLoginData((HttpServletRequest)request);
		String uid = rspData.getUID();
 
		if(uid == null || uid.equals("")){
			return false;
		}else{
			return true;
		}
	}
  • 통합 인증 서버에 새로운 토큰 발급을 요청하는 메서드 구현
        /**
	 * SSO 통합 인증 서버에 인증 토큰 생성을 요청하는 메서드
	 * 
	 */
	public void requestIssueToken(ServletRequest request, ServletResponse response) throws Exception {
 
		String serverIp = "";
    	String userIp = "";
    	String rtrURL = "";
    	String clientPort = "";
 
		serverIp = InetAddress.getLocalHost().getHostAddress();
		userIp = EgovClntInfo.getClntIP((HttpServletRequest)request);
		clientPort = ":" + request.getServerPort();	
    	rtrURL = ((HttpServletRequest)request).getRequestURI();
 
 
    	LoginVO loginVO = (LoginVO)((HttpServletRequest)request).getSession().getAttribute("loginVO");	
 
		ssoService.ssoReqIssueToken((HttpServletRequest)request, // 서블릿 요청 객체
			    (HttpServletResponse)response,	// 서블릿 응답 객체
                "form-based",			// 인증 방법
                loginVO.getUniqId(),				// 유니크아이디
                loginVO.getUserSe(),			// 아이디 식별정보
                "",		// SSN
                "http://" + serverIp + clientPort + rtrURL, // return url
                userIp,		// client ip
                serverIp);			// agent ip
	}
  • 통합 인증 서버에 인증된 토큰을 이용한 로컬 인증을 수행하는 메서드 구현
         /**
	 * SSO 통합 인증 서버에 인증이 된 경우 인증 서버의 토큰을 활용하여 로컬 로그인을 처리하는 메서드
	 * 
	 */
	public void ssoLoginByServer(ServletRequest request,
			ServletResponse response) throws Exception {
		SSORspData rspData = ssoService.ssoGetLoginData((HttpServletRequest)request);
 
		LoginVO loginVO = new LoginVO();
		loginVO.setUniqId(rspData.getUID());
		loginVO.setUserSe(rspData.getCN());
 
		//로컬 로그인 작성
		loginVO = loginService.actionLoginByEsntlId(loginVO);
 
 
		//((HttpServletRequest)request).getSession().setAttribute("uid", rspData.getUID());
 
		//스프링 시큐리티 로그인
		((HttpServletResponse)response).sendRedirect("/j_spring_security_check?j_username=" + loginVO.getUserSe() + loginVO.getId() + "&j_password=" + loginVO.getUniqId());
		//((HttpServletRequest)request).getRequestDispatcher("/j_spring_security_check?j_username=" + loginVO.getUserSe() + loginVO.getId() + "&j_password=" +                loginVO.getUniqId()).forward(request, response);
 
 
	}
  • 통합 인증 서버의 토큰 정보를 바탕으로 LoginVO 객체를 생성하는 메서드 구현
        /**
	 * 토큰 정보를 바탕으로  loginVO 객체를 생성하는 메서드
	 * 
	 */
	public LoginVO getLoginVO(ServletRequest request, ServletResponse response){
		SSORspData rspData = ssoService.ssoGetLoginData((HttpServletRequest)request);
 
		LoginVO loginVO = new LoginVO();
		loginVO.setUniqId(rspData.getUID());
		loginVO.setUserSe(rspData.getCN());
 
		return  loginVO;
	}
  • 통합 인증 서버에 글로벌 로그아웃(토큰 삭제)을 요청하는 메서드 구현
        /**
	 * SSO 인증 정보를 삭제하는 Global Logout을 처리한다.
	 * returnURL : Global Logout후 돌아가는 URL주소
	 * @throws IOException 
	 * 
	 */
	public void ssoLogout(ServletRequest request, ServletResponse response, String returnURL) throws IOException{
		((HttpServletResponse)response).sendRedirect("/exam/sso/globalLogout.do?returnURL=" + returnURL);
	}
 
egovframework/com/v2/uat/sso연계_서비스.txt · 마지막 수정: 2023/12/21 05:21 (외부 편집기)
 
이 위키의 내용은 다음의 라이센스에 따릅니다 :CC Attribution-Noncommercial-Share Alike 3.0 Unported
전자정부 표준프레임워크 라이센스(바로가기)

전자정부 표준프레임워크 활용의 안정성 보장을 위해 위험성을 지속적으로 모니터링하고 있으나, 오픈소스의 특성상 문제가 발생할 수 있습니다.
전자정부 표준프레임워크는 Apache 2.0 라이선스를 따르고 있는 오픈소스 프로그램입니다. Apache 2.0 라이선스에 따라 표준프레임워크를 활용하여 발생된 업무중단, 컴퓨터 고장 또는 오동작으로 인한 손해 등에 대해서 책임이 없습니다.
Recent changes RSS feed CC Attribution-Noncommercial-Share Alike 3.0 Unported Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki