SSO 중복 로그온 선택 UI 구성하기

중복 로그온 정책을 사용하면 먼저 인증 받은 사람(선입자)에 대한 처리와 나중에 로그인 하는 사람(후입자)에 대한 처리를 해야 합니다.

선입자에게는 후입자가 로그온을 요청한 시간, IP 정보를 표시할 수 있습니다.

후입에게는 로그온 시 선입자가 있고 선입자의 인증 세션 정보를 무효화 시키고 로그온 할 것인지 선택할 수 있는 페이지로 이동되게 할 수 있습니다

[DupChoice.cshtml]

@model NETS.SSO.Agent.MVC.Web.SSO.ViewModels.DupChoiceViewModel
@{
	Layout = null;
}
 
<!DOCTYPE html> 
<html>
<head>
	<meta name="viewport" content="width=device-width" />
	<title>중복 로그인</title>
	<script type="text/javascript">
		function startTimer(duration, display) {
			if (0 == duration) {
				display.textContent = "limitless";
			} else {
				var timer = duration, minutes, seconds;
				setInterval(function () {
					minutes = parseInt(timer / 60, 10);
					seconds = parseInt(timer % 60, 10);
					minutes = minutes < 10 ? "0" + minutes : minutes;
					seconds = seconds < 10 ? "0" + seconds : seconds;
					display.textContent = minutes + ":" + seconds;
					if (--timer < 0) {
						timer = duration;
					}
				}, 1000);
			}
		}
 
		function OnInit() {
			var minutes = 60 * @Model.TimeoutMinutes;
			var display = document.querySelector('#time');
			startTimer(minutes, display);
		}
 
		function OnDupCancel() {
			document.forms["form1"].action = "@Url.Action("DupChoiceCancel")";
			document.forms["form1"].submit();
		}
	</script>
 
</head>
<body onload="OnInit();">
	<form id="form1" method="post" action="@Url.Action("DupChoiceLogon")">
		<table border="0">
			<tr>
				<td colspan="2">중복 로그인</td>
			</tr>
			<tr>
				<td>ID : </td>
				<td>@Model.DupUserID</td>
			</tr>
			<tr>
				<td>IP : </td>
				<td>@Model.DupIP</td>
			</tr>
			<tr>
				<td>Time : </td>
				<td>@Model.DupTime</td>
			</tr>
			<tr>
				<td>Select Choice</td>
				<td>
				<input type="submit" id="btnOK" value="예" />&nbsp;
				<input type="button" id="btnCancel" value="아니오" onclick="OnDupCancel();" />
				</td>
			</tr>
			<tr>
				<td colspan="2">left : <span id="time" /></td>
			</tr>
		</table>
		<input type="hidden" name="ssorequest" value="@Model.SSORequestString" />
	</form>
</body>
</html>

[SSO\SSOController.cs]

[HttpPost]
public ActionResult DupChoice()
{
	AuthCheck authCheck = new AuthCheck(Request, Response);
	DupChoiceViewModel model = new DupChoiceViewModel(authCheck);

	return View(model);
}

[SSO\ViewModels\DupChoiceViewModel.cs]

public class DupChoiceViewModel
{
	public string TimeoutMinutes { get; private set; }
	public string DupUserID { get; private set; }
	public string DupIP { get; private set; }
	public string DupTime { get; private set; }
	public string SSORequestString { get; private set; }
 
	public DupChoiceViewModel(AuthCheck authCheck)
	{
		// 인증 서버로 부터 전달된 중복 로그인 위반 관련 정보를 수집한다.
		SSORequestString = authCheck.CurrentRequest["ssorequest"];
		DupCheck dup = new DupCheck(authCheck);
		DupUserID = dup.DupUserID;
		DupIP = dup.DupUserIP;
		DupTime = dup.DupTime;
		TimeoutMinutes = dup.TimeoutMinutes;
	}
}

Last updated

Was this helpful?