SSO Guide 4 Dev.
  • MOIN SSO 소개
  • SSO 기술의 이해
  • SSO의 동작과 이해
    • 로그온
    • 로그오프
    • 로그온 실패
    • 중복 로그온
    • 2-Factor 인증
    • SSO 세션 탈취 검사
  • 개발 시작하기
    • 업무시스템 정보 전달
    • 라이브러리 다운로드
    • 라이브러리 적용
    • Agent 환경 설정 파일 수정
    • 인증확인과 인증상태에 따른 처리 방법
    • 통합 인증 페이지 이용하기
    • 로그온 UI 개발
    • SSO 로그오프 방법 제공
  • 개발하기
    • .NET
      • SSO 로그온 UI 구성하기
      • 업무 시스템 로그온 로직 구현하기
      • SSO 로그온 에러 처리 로직 구현하기
      • SSO 세션 탈취 검사하기
      • SSO 로그오프 방법 제공하기
      • 업무 시스템 로그오프 로직 구현하기
      • SSO 중복 로그온 선택 UI 구성하기
    • .NET MVC
      • SSO 로그온 UI 구성하기
      • 업무 시스템 로그온 로직 구현하기
      • SSO 로그온 에러 처리 로직 구현하기
      • 세션 탈취 검사하기
      • 로그오프 방법 제공하기
      • 업무 시스템 로그오프 로직 구현하기
      • SSO 중복 로그온 선택 UI 구성하기
    • JAVA
      • SSO 로그온 UI 구성하기
      • 업무 시스템 로그온 로직 구현하기
      • SSO 로그온 에러 처리 로직 구현하기
      • 세션 탈취 검사하기
      • SSO 로그오프 방법 제공하기
      • 업무 시스템 로그오프 로직 구현하기
      • SSO 중복 로그온 선택 UI 구성하기
    • SPA(Single Page Application)
      • Agent Library 명세
      • Agent 환경 구성하기
      • SSO 로그온 UI 구성하기
      • 업무 시스템 로그온 로직 구현하기
      • SSO 로그온 에러 처리 로직 구현
      • SSO 세션 탈취 검사하기
      • SSO 로그오프 방법 제공하기
      • 업무 시스템 로그오프 로직 구현하기
      • SSO 중복 로그온 선택 UI 구성하기
  • 주요 클래스
    • AuthCheck(.NET)
    • AuthCheck(.NET MVC)
    • AuthCheck(Java)
    • AuthStatus
  • 개발 테스트
  • SSO 오류코드
  • 갱신 이력
  • Trouble Shooting
  • Known Issues
  • Help Center
Powered by GitBook
On this page

Was this helpful?

  1. 개발하기
  2. .NET

SSO 로그온 UI 구성하기

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

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

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

파일명

설명

Logon.aspx, cs

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

LogonEnc.aspx, cs

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

LogonTFA.aspx, cs

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

샘플코드

Logon.aspx.cs
using NETS.SSO.Client;
using NETS.SSO.Client.AuthCheck;
using NETS.SSO.Client.Common;
using NETS.SSO.Client.Configuration;
using System;
using System.Threading;
 
public partial class Logon : System.Web.UI.Page
{
    // 태그 이름들: SSO 서버에 데이터를 전달할 때, 
    // 그 파라미터 이름을 통일 시키기 위하여 태그명을 정책으로 관리합니다.
    protected string uidTagName = string.Empty;         // 사용자 아이디 태그명
    protected string pwdTagName = string.Empty;         // 사용자 비밀번호 태그명
    protected string credTypeTagName = string.Empty;    // 자격증명 종류 태그명
    protected string returnURLTagName = string.Empty;   // 리턴 URL 태그명
    protected string siteTagName = string.Empty;        // 사이트 식별자 태그명
 
    protected string errorCode = string.Empty;          // 에러 코드
    protected string errorMessage = string.Empty;       // 에러 메시지
 
    protected string siteID = string.Empty;             // 사이트 식별자
    protected string logonUrl = string.Empty;           // 로그온 URL
    protected string returnUrl = string.Empty;          // 리턴 URL
    protected string ssoCheckUrl = string.Empty;        // SSO 인증 체크 URL (로그온 페이지 용도)
 
    protected void Page_Load(object sender, EventArgs e)
    {
        // SERVER_NAME 값을 기준으로, SSO 정책 정보를 로드합니다.
        // SERVER_NAME 값은 WAS에 전달된 도메인 이름 값이다. (주로 사용자가 입력한 도메인 값)
        string servername = Request.ServerVariables["SERVER_NAME"]; 
        SSOProvider ssoProvider = SSOConfig.Instance.GetCurrentSSOProvider(servername);
        SSOSite ssoSite = ssoProvider.GetCurrentSSOSite(servername);
 
        // 각 태그명 설정
        uidTagName = ssoProvider.GetParamName(ParamInfo.USER_ID);
        pwdTagName = ssoProvider.GetParamName(ParamInfo.USER_PW);
        credTypeTagName = ssoProvider.GetParamName(ParamInfo.CRED_TYPE);
        returnURLTagName = ssoProvider.GetParamName(ParamInfo.RETURN_URL);
        siteTagName = ssoProvider.GetParamName(ParamInfo.SITE_ID);
 
        try
        {
            // 정책 변경 체크 (코드 제거 하면 안됨)
            // SSO 서버에서 정책을 새로 배포 했을 경우, 변경을 감지하여 정책을 다시 받아오도록 하는 코드
            string policyVersion = Utility.GetRequestValue(Request.Form, "policyVersion", string.Empty);
            if (!string.IsNullOrEmpty(policyVersion) && Int32.Parse(policyVersion) > ssoProvider.SSOPolicyVersion)
            {
                SSOConfig.Reloading = false;
                SSOConfig.Instance.Reload();
 
                ssoProvider = SSOConfig.Instance.GetCurrentSSOProvider(servername);
                ssoSite = ssoProvider.GetCurrentSSOSite(servername);
            } 
            // 인증 객체 선언(Request와 Response 인계)
            AuthCheck auth = new AuthCheck(Request, Response);
            // 인증 체크(인증 상태 값 리턴)
            AuthStatus status = auth.CheckLogon();
            // 인증 체크 후 상세 에러코드 조회
            errorCode = auth.ErrorCode.ToString();
 
            // 인증 상태 별 처리
            if (status == AuthStatus.SSOSuccess)
            {
                // ---------------------------------------------------------------------
                // 인증 상태: 인증 성공
                // - 인증 토큰(쿠키) 존재하고, 토큰 형식에 맞고, SSO 정책 체크 결과 유효함.
                // --------------------------------------------------------------------- 
                // 로그온 UI 페이지가 아닌 업무 페이지로 이동 시킴
                Response.Redirect("./Default.aspx");    
            }
            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();
        }
        catch (AgentException aex)
        {
            Response.Write(aex.ToString());
        }
        catch (ThreadAbortException)
        {  }
         // 리턴 URL 설정 (인증 후 되돌아 올 URL)
        // 로그온 UI 페이지로 전달된 리턴 URL 값 조회
        returnUrl = Request[returnURLTagName];
        // 전달된 리턴 URL 값 존재 여부 확인
        if (string.IsNullOrEmpty(returnUrl))
        {
            // 리턴 URL 값이 전달되지 않았다면, 기본 URL을 그 값으로 설정
            returnUrl = ssoSite.GetDefaultReturnUrl(Request);
            if (string.IsNullOrEmpty(returnUrl))
            {
                // 기본 URL이 없을 경우. 현재 URL을 리턴 URL로 설정(이 부분은 필요 시 수정. ThisURL을 사용해도 무방)
                returnUrl = Request.Url.AbsoluteUri;
            }
        } 
        // 사이트 식별자 설정
        // 로그온 UI 페이지로 전달된 사이트 식별자 조회
        siteID = Request[siteTagName];
        if(string.IsNullOrEmpty(siteID))
            siteID = ssoSite.ID;    // 전달된 식별자가 없으면, 현재 사이트 식별자를 사용 
        // 사용자 계정을 SSO에 전달할 인증 서버의 로그온 URL 설정
        logonUrl = ssoSite.GetLogonUrl(Request);
    }
}
Previous.NETNext업무 시스템 로그온 로직 구현하기

Last updated 5 years ago

Was this helpful?