上一篇文章写了被动认证的实现,本文接着写主动认证的实现。
一、认证流程
为了和被动认证有个比较,这些列出被动认证的流程图
1.1认证(图1为被动认证,图2为主动认证):
主动认证的流程和被动的区别是,在每次登录后,主动发通知到子站点A,告诉子站点A已经登录,并且拥有Token。这种方法的前提是,每次用户退出时,认证中心也会主动通知所有的子系统用户已经退出,清除该Token。这种认证方法有一个好处,减少了认证中心和子站点之间的交互次数,提高了性能。
二、认证实现(C#,VS2008)
2.1、认证实现
首先,建立认证中心的Web站点,页面机构如下:
子站点SubWebSite工程,页面结构如下:
修改一下上边的验证示意图,得到页面调用顺序示意图:
当用户请求子系统页面(Default.aspx),则该用户是否已经有了Token(也就是Session[“Token”]),若没有,则跳转到用户中心进行登录,登录之后,用户中心发送通知,告知子系统用户已经登录(SSO.aspx设置Seesion[“Token”]),通知结束后进行跳转回子系统Default.aspx页面,此时已经有Token,可以拿此Token去验证中心获取用户信息,并显示页面信息给用户。
通知部分使用js通知(如下):
<script type="text/javascript" src="jquery.min.js"></script>
<%--通知子系统用户登录了(这里要对每个子系统进行通知)--%>
<script type="text/javascript" src="http://mowen:8000/subwebsite/SSO.aspx<%=ssoParas%>"></script>
<script type="text/javascript">
$(document).ready( //使用$(document).ready的作用是,通知请求返回之后再跳转
function() {
var returnUrl = '<%=returnUrl%>';
if ($.trim(returnUrl) != null) {
//通知结束后,跳转到子站点
location.href = returnUrl;
}
}
);
</script>
<script type="text/javascript" src="jquery.min.js"></script>
<%--通知子系统用户退出了(这里要对每个子系统进行通知)--%>
<script type="text/javascript" src="http://mowen/usercenter/SSO.aspx<%=ssoParas%>"></script>
<script type="text/javascript">
$(document).ready(
function() {
//通知结束后,跳转到登录页面
location.href = "SignIn.aspx?ReturnUrl=<%=returnUrl %>";
}
);
</script>
退出通知结束后跳转到登录页面。
来看实现代码:
子系统subWebSite:Default.aspx(子系统需要认证的页面)
<form id="form1" runat="server">
<div>
通过了认证,登录的用户名为<%=Session["UserName"] %>
&nbs