根据上面的接口交互描述,我们可以看到,应用系统要接入单点登录系统,实现通行证机制,主要要实现以下接口功能。
用户身份认证
检查用户是否为合法用户,否则,向Service认证中心发送认证请求。
这里用了一个页面基类来实现身份验证的功能,所有需要做验证的页面,只需要继承该类即可,当然,也可以用这个代码实现一个用户自定义控件,放到需要做验证的页面上即可。
//<summary>
//====================
//应用系统验证(页面)的基类
//====================
//</summary>
publicclass ValidatePageBase : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
CustomerValidate();
}
public void CustomerValidate()
{
bool Pass =(bool)Session["Pass"];//当前状态
if (!Pass)
{
string Security =Assistant.GetSecurity();//安全码
Session["Security"] =Security;
Session["ReturnUrl"] =Request.RawUrl;//要访问的页面
//分配给当前应用系统的API代码
string apikey =Assistant.GetConfigString("apikey");
//认证服务器验证地址
string posturl =Assistant.GetConfigString("ServiceValidate");
posturl = UrlOper.AddParam(posturl,"apikey", apikey);
posturl = UrlOper.AddParam(posturl,"security", Security);
//向认证服务器发送验证请求
Response.Redirect(posturl);
}
}
}
接收状态同步
在认证服务器确认用户身份通过后,调用该接口更新当前应用系统用户状态。应用系统接收这些参数,进行校验处理后,更新本地的用户状态。
//<summary>
//====================
// (接收)状态同步页面的基类
//====================
//</summary>
publicclass SynPageBase : System.Web.UI.Page
{
#region 获取参数
// <summary>
// 接收本地应用系统的UserName
// </summary>
public virtual string InUserName
{
get
{
if ((Request["un"] !=null) && (Request["un"].ToString() != ""))
{
returnRequest["un"].Trim();
}
return "";
}
}
// <summary>
// 接收登录标志Pass
// </summary>
public virtual string InPass
{
get
{
if ((Request["pass"] !=null) && (Request["pass"].ToString() != ""))
{
returnRequest["pass"].Trim();
}
return "";
}
}
// <summary>
// 接收安全码Security
// </summary>
public virtual string InSecurity
{
get
{
if ((Request["security"]!= null) &&
(Request["security"].ToString()!= ""))
{
returnRequest["security"].Trim();
}
return "";
}
}
#endregion
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
CustomerValidate();
}
protected virtual void CustomerValidate()
{
string Security =Session["Security"].ToString();
if (Security != "")
{
//安全码校验是否一致
if(Assistant.HashEncoding(Security) == InSecurity)
{
if (InPass.ToLower() =="true") //登录状态是否登录
{
////////根据InUserName,进行直接登录///////////
//FormsAuthentication.SetAuthCookie(InUserName, false);
Session["UserName"] = InUserName;
Session["Pass"] =true;
///////////////////////////////////////////////
//返回认证前要访问的地址
Response.Redirect(Session["ReturnUrl"].ToString());
}
}
else //请求和应答的安全码是不匹配的
{
Response.Write("数据不一致错误!");
}
}
else
{
if (Session["ReturnUrl"]!= null &&
Session["ReturnUrl"].ToString()!= "")
{
Response.Redirect(Session["ReturnUrl"].ToString());
}
Response.Redirect("index.aspx");
}
}
}
用户注销
通过执行Logout.aspx页面,实现退出当前应用系统的登录。认证服务中心注销时即调用该页面。
publicpartial class Logout : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
ClearSession();
}
private void ClearSession()
{
Session.Clear();
Session.Abandon();
}
}
需要说明的是,只退出当前应用的登录是不起作用的,需要把Service认证中心的登录信息注销才可以。若要注销所有应用中的登录信息,只需要转到Service认证中心的注销页即可。例如:
Response.Redirect(ConfigurationSettings.AppSettings["ServiceUrl"]+
"/logout.aspx");
更新认证服务器状态
我们知道,页面在一段时间内不刷新,Session就会超时失效,在我们一直访问应用系统(如Blog或BBS)的时候,怎么才能保证Service的Session不会失效呢?很简单,我们可以通过不断调用Service认证服务器的页面来保持Session有效。通过在应用系统(如Blog或BBS)所有的页面内都用<iframe>的方式嵌套Service认证服务器的某个页面,就能保证Service和应用系统(如Blog或BBS)的页面同时刷新。需要注意的一点是,Service的Session必须大于所有应用系统(如Blog或BBS)的Session超时时间,这个可以在Web.config里进行配置。
我们可以用这段<iframe>代码实现一个用户控件方式,放到所有的页面会更容易维护。页面代码如下:
<%@ Control Language="C#"AutoEventWireup="true" CodeBehind=
"SynServerIFrame.ascx.cs"Inherits="Blog.SynServerIFrame"
%>
<iframewidth=0 height=0 src='<%=ServiceUrl%>/SessionState.aspx'></iframe>
C#代码如下:
publicpartial class SynServerIFrame : System.Web.UI.UserControl
{
public string ServiceUrl=ConfigurationSettings.AppSettings["ServiceUrl"];
}
通过实现以上接口和代码,我们的应用系统就已经支持单点登录功能了。我们可以运行测试,直接访问应用系统的页面,会自动转到Service认证服务器进行登录。一旦登录成功,则访问任何一个系统System内的应用系统都将不再需要任何登录,并且不管有多少个网站应用,只要这些网站系统都符合接口标准,则这些网站就都能保持Service的用户状态,同时能通过Service获得用户的状态,而不需要再登录。也就是说,我们实现了SSO(单点登录)。
本文节选自《项目中的.NET》一书
李天平编著
电子工业出版社出版
分享到:
相关推荐
此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的宝贵成果和盘托出,力求将编程思想与具体实践融为一体,提炼出适合于广大读者快速理解和彻底掌握.NET软件开发的最佳学习...
此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的宝贵成果和盘托出,力求将编程思想与具体实践融为一体,提炼出适合于广大读者快速理解和彻底掌握.NET软件开发的最佳学习...
应用系统互信认证。 操作员、组织信息的访问和维护功能。 应用接入SSO系统主要可以通过两种方式:Out-Application 及In-Application方式。 Out-Application模式: 这种方式通过SSO Agent 进行接入。SSO Agent ...
商家平台按照菠萝派商城的接口规范开发自身对外开放接口,ERP系统通过菠萝派商城访问平台接口。 菠萝派商城,ERP系统,商家平台三者需要统一使用同一套账号。账号在菠萝派商城中注册申请,主要包括菠萝派商城应用...
定义了中国移动移动信息业务中心Mobile Information Service Center(以下简称为MISC)平台V1.5版本与WAP业务SP之间的应用程序接口,目的是为SP开发可接入MISC平台的WAP业务提供指导规范。 本文档并不用于指导SP如何...
这是毕业时的论文,需要的话可以来下. 随着以太网Internet上取得的巨大成功,其应用领域也在不断扩大,正逐渐向工业控制,信息家电,智能大厦等领域发展。目前以上领域中应用最多的控制器为。。。。
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
数据库应用系统开发技术概述 从数据流角度分析,任何一个数据库应用系统可分为三个职能组成部分: 输入与输出(称为用户接口) 处理(运算操作) 数据存储 用户界面处理 业务处理功能 数据服务功能 数据库应用系统的...
应用服务器版软件是针对企业内部/外部短信业务需求开发出来的企业短信中间件产品,为各行业短信应用开发提供各种形式的接口。 系统特点 1) 企业无需购买其他短信收发设备,安装软件后接入互联网即可实现中国...
应急指挥协作平台提供各类接口模块,如短波/超短波接入模块、短信接入模块、音频接入模块、广播接入模块、用户接入模块,实现系统与各类语音终端的互联互通; 系统提供呼叫中心业务服务器和呼叫中心相关业务...
本文介绍了图像采集系统的硬件软件设计,简单介绍了图像处理基本知识和SCCB接口协议,详细介绍了摄像头OV2640、STM32F4的数字摄像头接口DCMI和可变存储控制器FMC等模块的硬件接口、模式配置、控制方法,最后给出软件...
菜单接入 接口化菜单接入,可将应用轻松接入任意菜单模块中,无需后台配置。 精美样式 针对SAPI++管理端开发独立精美CSSUI样式。 独立域名 所有租户支持独立绑定独立域名.例:WEB/H5可绑定独立访问。 SAPI++ v2.0的...
“企信通二次接口”是一种高效便携的短信发送...企业可以通过二次接口客户端自动、快速、稳定地发送短信,并且可以把发送和接收短信的功能接入到企业内部应用系统中,扩展企业内办公及其他应用系统的移动信息化功能。
4.1. 外部接入接口 .............................................................................................. 9 4.1.1. 业务功能.........................................................................
码多多AI服务有AI智聊系统、AI绘画系统、接入AI接口等行业的AI解决方案。 一、码多多ai服务: 1、AI智聊系统开发 快速搭建AI智能聊天系统,包含:公众号端,小程序端,PC端,APP端 2、ai绘画系统开发 快速搭建...
为了企业用户更加简便同时又灵活地实现相关的业务,我们提供了一个企业业务系统接入华为公司短信平台的应用开发接口。该接口以DLL的方式提供给企业应用系统调用。通过调用该接口的函数可以实现短信的定时发送、接收...
针对KJ95N型煤矿综合监控系统采用文件方式为不同系统...实际应用表明,KJ95N型煤矿综合监控系统在增加OPC Server功能后,为其接入到矿井综合自动化系统提供了统一的接口,也为其融入煤矿信息系统提供了更好的解决方案。
1.采用vite搭建,支持图片压缩,兼容ie11,包名自定义,proxy代理请求,less语法,自动生成压缩包框架,框架主题色定制和公用样式...7.该系统开箱即用,即适合初学者学习也适合开发者应用项目开发,后期会上线tsx的版本
本项目的主要目标是: (1)系统提供管理全县参合家庭档案信息以及参合农民个人档案信息的功能,方便乡镇农合经办点工作人员维护...(4)系统提供慢病报销 HIS 接口,能接入第三方 HIS 系统,实现慢病报销的实时结算。