로그온 UI는 사용자가 인증되어 있지 않는 상태로 로그온을 수행할 수 있도록 UI를 제공해야 합니다.
로그온 UI는 사용자의 자격증명(Credential)을 입력할 수 있도록 구성됩니다.
사용자 아이디와 비밀번호가 일반적입니다. 샘플로 제공하는 UI 구성은 다음과 같습니다.
파일명
설명
Logon.cshtml
일반적인 방식으로 사용자 아이디, 비밀번호를 입력할 수 있는 UI 샘플
LogonEnc.cshtml
Logon.cshtml과 전반적으로 동일하나 비밀번호 암호화 처리가 추가된 UI 샘플
LogonTFA.cshtml
2-Factor 인증 사시 1단계 인증 방식(사용자 자격증명 입력과 보안코드를 함께 입력)의 UI 샘플
[SSO/SSOController.cs] 의 샘플 코드
SSOController.cs
public ActionResult Logon()
{
// SSO 인증 서버가 Logon 액션 메소드로 리다이렉트할 때 몇가지 정보를 HTTP POST로 전달해 준다.
// 이 정보는 하기와 같다.
// ssoSite : 이 정보는 SSO 인증 확인을 요청한 웹 응용 프로그램의 식별자이다.
// returnURL : 이 정보는 SSO 인증을 완료한 후에 최종적으로 사용자에 제공할 웹 응용 프로그램의 URL이다.
// policyVersion : 이 정보는 SSO 인증 서버가 사용하고 있는 인증 정책의 버전 번호이다. 만약에 이 웹 응용 프로그램이
// 사용하고 있는 인증 정책 버전과 policyVersion이 다를 경우에, 이 웹 응용 프로그램의 인증 정책을 초기화 해야 한다.
// 또한 ssoSite와 returnURL은 이 웹 응용 프로그램과 관련되어 있지 않은 정보가 전달될 수 있다. 따라서 이 두가지 정보는
// SSO 인증 서버로 부터 받은 정보를 그대로 다시 SSO 인증 서버로 전달해 주어야 한다. 비즈니스 요건에 따라서는 원하는 값으로
// 변경하여 전송하는 것은 가능하지만, 가급적 전달된 정보를 변경하지 않고 그대로 사용할 것을 권장한다.
// 이미 사용자가 SSO 인증을 받은 상태에서, 로그온 UI를 요청할 경우를 대비해서 SSO 인증 확인을 한다.
AuthCheck authCheck = new AuthCheck(Request, Response);
AuthStatus status = authCheck.CheckLogon();
if (status == AuthStatus.SSOSuccess)
{
// 인증 상태 검사에서 성공했기 때문에, 이미 사용자는 인증을 완료한 상태이다. 더 이상 로그온 UI를 제공할 이유가 없기 때문에,
// 비즈니스 요건에 맞는 URL로 사용자를 이동시킨다.
// 이 샘플에서는 Home/Index로 이동시킨다.
return RedirectToAction("Index", "Home");
}
else if (status == AuthStatus.SSOUnAvailable)
{
// 인증 상태 검사 결과가 SSO 인증 서버가 서비스를 제공할 수 없는 상태이다.
// 이 경우에는 SSO 인증을 서비스 받을 수 없는 상황이기 때문에, 자체적으로 제공하는 로그온 UI를 제공하며,
// 사용자에게 웹 응용 프로그램에서 제공하는 서비스를 제공해 주어야 한다.
// TODO 이곳에 자체 로그온 UI를 제공할 수 있는 코드를 추가한다.
}
LogonViewModel model = new LogonViewModel(authCheck.CurrentSSOProvider);
model.SetPostInfo(authCheck, authCheck.CurrentSSOProvider);
return View(model);
}