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);
}
}
Last updated
Was this helpful?