SSO 로그온 UI 구성하기

로그온 UI는 사용자가 인증되어 있지 않는 상태로 로그온을 수행할 수 있도록 UI를 제공해야 합니다.

로그온 UI는 사용자의 자격증명(Credential)을 입력할 수 있도록 구성됩니다.

보통은 사용자 아이디와 비밀번호가 대부분입니다. 샘플로 제공하는 UI 구성은 다음과 같습니다.

파일명

설명

logon.jsp

일반적인 방식으로 사용자 아이디, 비밀번호를 입력할 수 있는 UI 샘플

logonEnc.jsp

logon.jsp와 전반적으로 동일하나 비밀번호 암호화 처리가 추가된 UI 샘플

logonTfa.jsp

2-Factor 인증 사용시 1단계 인증 방식(사용자 자격증명 입력과 보안코드를 함께 입력)의 UI 샘플

샘플코드

logon.jsp
<%@ page import="com.nets.sso.agent.AuthUtil" %>
<%@ page import="com.nets.sso.agent.authcheck.AuthCheck" %>
<%@ page import="com.nets.sso.agent.configuration.SSOConfig" %>
<%@ page import="com.nets.sso.agent.configuration.SSOProvider" %>
<%@ page import="com.nets.sso.agent.configuration.SSOSite" %>
<%@ page import="com.nets.sso.common.AgentException" %>
<%@ page import="com.nets.sso.common.Utility" %>
<%@ page import="com.nets.sso.common.enums.AuthStatus" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%
    //태그명
    String idTagName, pwdTagName, credTagName, returnUrlTagName, siteTagName;

    String ssoLogonUrl;        // 로그온 URL
    String ssoCheckUrl;        // 인증체크 URL
    String returnUrl;          // 되돌아올 URL

    String errorCode;          // 에러코드
    String errorMessage = "";  // 에러 메시지
    String policyVersion;      // 정책 버전
    String siteID;             //사이트 식별자

    String serverName;
    SSOProvider ssoProvider;
    SSOSite ssoSite;


    //인증객체생성 및 인증확인
    try {
        // 인증 객체 선언(Request와 Response 인계)
        AuthCheck auth = new AuthCheck(request, response);

        serverName = request.getServerName();
        ssoProvider = SSOConfig.getInstance().getCurrentSSOProvider(serverName);
        ssoSite = ssoProvider.getCurrentSSOSite(serverName);

        // 정책 변경 체크 ( 코드 제거하면 안됨 )
        // SSO 서버에서 정책을 새로 배포했을 경우 변경을 감지하여 정책을 다시 받아오도록 하는 코드
        policyVersion = Utility.getRequestValue(request, "policyVersion", Utility.EMPTY_STRING);
        if (!Utility.isNullOrEmpty(policyVersion) && Integer.parseInt(policyVersion) > ssoProvider.getPolicyVer()) {
            SSOConfig.getInstance().reLoad();
            ssoProvider = SSOConfig.getInstance().getCurrentSSOProvider(serverName);
            ssoSite = ssoProvider.getCurrentSSOSite(serverName);
        }

        //일반 설정값들
        idTagName = ssoProvider.getParamName(AuthUtil.ParamInfo.USER_ID);
        pwdTagName = ssoProvider.getParamName(AuthUtil.ParamInfo.USER_PW);
        credTagName = ssoProvider.getParamName(AuthUtil.ParamInfo.CRED_TYPE);
        returnUrlTagName = ssoProvider.getParamName(AuthUtil.ParamInfo.RETURN_URL);
        siteTagName = ssoProvider.getParamName(AuthUtil.ParamInfo.SITE_ID);

        // 인증 체크(인증 상태 값 리턴)
        AuthStatus status = auth.checkLogon();
        // 인증 체크 후 상세 에러코드 조회
        errorCode = String.valueOf(auth.getErrCode());

        //인증상태별 처리
        if (status == AuthStatus.SSOSuccess) {
            // ---------------------------------------------------------------------
            // 인증 상태: 인증 성공
            // - 인증 토큰(쿠키) 존재하고, 토큰 형식에 맞고, SSO 정책 체크 결과 유효함.
            // ---------------------------------------------------------------------

            // 로그온 UI 페이지가 아닌 업무 페이지로 이동 시킴
            response.sendRedirect("default.jsp");

        } else if (status == AuthStatus.SSOUnAvailable) {
            // ---------------------------------------------------------------------
            // 인증 상태 : 인증 실패 또는 로그오프 상태
            // - 인증 오류 발생 또는 로그온 하지 않은 로그오프 상태
            // ---------------------------------------------------------------------

            // SSO 장애 시 정책에 따라 자체 로그인 페이지로 이동 시키거나, SSO 인증을 위한 포탈 로그인 페이지로 이동
            errorMessage = "SSO service is not available now. Please try again in a few minutes.";
        }
        // 로그온 페이지에서, 인증 서버에 인증 확인하는 스크립트 (HTML의 Header항목에 출력하도록 해야 함)
        // 사용자가 인증을 받았다면, 인증을 수행하도록 Javascript가 동작.
        // 사용자가 인증을 받지 않았다면, 아무런 동작도 없음.
        ssoCheckUrl = auth.getTrySSOScript();

        // 리턴 URL 설정 (인증 후 되돌아 올 URL)
        // 로그온 UI 페이지로 전달된 리턴 URL 값 조회
        returnUrl = request.getParameter(returnUrlTagName);
        if (Utility.isNullOrEmpty(returnUrl)) {
            // 리턴 URL 값이 전달되지 않았다면, 기본 URL을 그 값으로 설정
            returnUrl = ssoSite.getDefaultReturnUrl();
            if (Utility.isNullOrEmpty(returnUrl)) {
                // 기본 URL이 없을 경우. 현재 URL을 리턴 URL로 설정(이 부분은 필요 시 수정. ThisURL을 사용해도 무방)
                returnUrl = auth.getThisUrl();
            }
        }

        // 사이트 식별자 설정
        // 로그온 UI 페이지로 전달된 사이트 식별자 조회
        siteID = request.getParameter(siteTagName);
        if (Utility.isNullOrEmpty(siteID)) {
            siteID = ssoSite.getId();       // 전달된 식별자가 없으면, 현재 사이트 식별자를 사용
        }
        // 사용자 계정을 SSO에 전달할 인증 서버의 로그온 URL 설정
        ssoLogonUrl = ssoSite.getLogonUrl(request);
%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>NETS*SSO - Logon</title>
    <%=ssoCheckUrl%>
    <script language="javascript" type="text/javascript">
        //로그온
        function OnLogon() {
            if (document.forms["form1"].txtUserID.value === "") {
                alert("사용자 ID를 입력하세요");
                return;
            }
            if (document.forms["form1"].txtPwd.value === "") {
                alert("사용자의 로그온 비밀번호를 입력하세요");
                return;
            }
            document.forms["form1"].target = "_top";
            document.forms["form1"].submit();
        }

        function OnInit() {
            document.forms["form1"].txtUserID.focus();
        }
    </script>
</head>
<body onLoad="OnInit();">
<form id="form1" method="post" action="<%=ssoLogonUrl%>">
    <table>
        <tr>
            <td>사용자 ID :</td>
            <td><input type="text" id="txtUserID" name="<%=idTagName%>"/></td>
        </tr>
        <tr>
            <td>비밀번호 :</td>
            <td><input type="password" id="txtPwd" name="<%=pwdTagName%>"/></td>
        </tr>
        <tr>
            <td colspan="2" align="center"><input type="button" value="로그온" onclick="OnLogon();"/></td>
        </tr>
    </table>
    <input type="hidden" id="credType" name="<%=credTagName%>" value="BASIC"/>
    <input type="hidden" name="<%=returnUrlTagName%>" value="<%=returnUrl%>"/>
    <input type="hidden" name="<%=siteTagName%>" value="<%=siteID%>"/>
</form>
<hr/>
에러 코드:<%=errorCode%>
<hr/>
에러 메시지:<%=errorMessage%>
<hr/>
<a href="./logonEnc.jsp">암호화 로그온</a>
</body>
</html>
<%
} catch (AgentException e) {
    System.out.println("ErrorCode : " + e.getExceptionCode().toString());
    System.out.println("ErrorMessage : " + e.getMessage());
%>
<%=e.toString()%>
<%
    }
%>

Last updated

Was this helpful?