教你开发asp.net的单点登录系统
2014-12-30 11:57
399 查看
单点登录系统,简称SSO。以下是我花了几个小时写的一个简单实现。特把实现思路和大家分享。
背景:某项目使用ASP.NET MemberShip来做会员系统,需要同时登录多个系统。而项目的开发人员无法在MemberShip基础上做单点登录。
故这个单点登录系统需要能无缝集成到这些系统中的任何系统中,作为服务端。
下面我们来看看具体的实现步骤,没耐心看完的朋友可直接上github上查阅:(https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/):
一. 定义SSO的主要方法:
1. 客户端需要包含:登录,登出,获取会话
2. 服务端需要处理客户端的请求,同时包含会话的管理,以及客户端的注册
2.1 客户端注册
将客户端注册,在返回登录/登出结果的时候,会请求所有客户端,以实现同步。
2.2 会话管理
需要存储会员和会话键之间的关系,在这个实现中我使用了KV数据库,LevelDb来支持。
同时定义了ISessionSet,意味着可以使用任何方式来存储会话,只要实现了ISessionSet接口
ISessionSet.cs
三。验证会员
因为会员不存在于此SSO中,故定义了委托,在初始化服务端时,传入委托即可。
委托返回int值,为会员的编号,所以我们还需要定义一个获取会员信息的委托
四. 启动服务端
至此,我们已经完成了基本实现。
PS: 好久没有发博客了,好辛苦。直接附上DEMO:
https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/Demo/server.ashx.cs
背景:某项目使用ASP.NET MemberShip来做会员系统,需要同时登录多个系统。而项目的开发人员无法在MemberShip基础上做单点登录。
故这个单点登录系统需要能无缝集成到这些系统中的任何系统中,作为服务端。
下面我们来看看具体的实现步骤,没耐心看完的朋友可直接上github上查阅:(https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/):
一. 定义SSO的主要方法:
1. 客户端需要包含:登录,登出,获取会话
using System; using System.Web; using Ops.Cms.Extend.SSO; namespace Ops.Cms.Extend.SSO.Client { public interface ISessionClient { /// <summary> /// 处理SSO请求 /// </summary> /// <param name="context"></param> void HandleSsoRequest(HttpContext context); /// <summary> /// 获取会话 /// </summary> /// <param name="sessionKey"></param> /// <returns></returns> SessionResult GetSession(String sessionKey); /// <summary> /// 获取会话Key /// </summary> /// <returns></returns> String GetSessionKey(); /// <summary> /// 同步登陆 /// </summary> /// <param name="user"></param> /// <param name="pwd"></param> /// <returns></returns> SsoResult Login(String user, String pwd); /// <summary> /// 同步登出 /// </summary> /// <param name="sessionKey"></param> /// <returns></returns> SsoResult Logout(String sessionKey); } }
2. 服务端需要处理客户端的请求,同时包含会话的管理,以及客户端的注册
using System; using System.Collections.Generic; using System.Text; using System.Web; using Ops.Framework.Extensions; namespace Ops.Cms.Extend.SSO.Server { public class SessionServer { /// <summary> /// 注册客户端 /// </summary> /// <param name="url"></param> public void RegisterClient(String url) /// <summary> /// 会话管理 /// </summary> public SessionManager SessionManager /// <summary> /// 会话服务响应 /// </summary> public String Process(HttpContext context) /// <summary> /// 登陆 /// </summary> /// <param name="usr"></param> /// <param name="pwd"></param> /// <returns></returns> private SsoResult Login(string usr, string pwd) /// <summary> /// 退出登陆 /// </summary> /// <param name="sessionKey"></param> /// <returns></returns> private SsoResult LoginOut(string sessionKey) } }
2.1 客户端注册
将客户端注册,在返回登录/登出结果的时候,会请求所有客户端,以实现同步。
2.2 会话管理
需要存储会员和会话键之间的关系,在这个实现中我使用了KV数据库,LevelDb来支持。
同时定义了ISessionSet,意味着可以使用任何方式来存储会话,只要实现了ISessionSet接口
ISessionSet.cs
namespace Ops.Cms.Extend.SSO { /// <summary> /// 会话数据集合 /// </summary> public interface ISessionSet { /// <summary> /// 更新会话信息 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns>返回之前的会话信息</returns> string Put(string key, string value); /// <summary> /// 删除会话信息 /// </summary> /// <param name="key"></param> void Delete(string key); /// <summary> /// 获取会话信息 /// </summary> /// <param name="key"></param> string Get(string key); } }
三。验证会员
因为会员不存在于此SSO中,故定义了委托,在初始化服务端时,传入委托即可。
namespace Ops.Cms.Extend.SSO { /// <summary> /// 登陆处理 /// </summary> /// <param name="usr"></param> /// <param name="pwd"></param> /// <returns>返回personId</returns> public delegate int SSOLoginHandler(string usr,string pwd); }
委托返回int值,为会员的编号,所以我们还需要定义一个获取会员信息的委托
namespace Ops.Cms.Extend.SSO { /// <summary> /// 人员获取处理事件 /// </summary> /// <param name="personId"></param> /// <returns></returns> public delegate Person PersonFetchHandler(int personId); }
四. 启动服务端
至此,我们已经完成了基本实现。
PS: 好久没有发博客了,好辛苦。直接附上DEMO:
https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/Demo/server.ashx.cs
相关文章推荐
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 将session存入数据库的方法(摘自“漂泊雪狼”--在asp.net程序开发中避免编译就要重新登录系统的小技巧 )
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 教你开发asp.net的单点登录系统
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- 在asp.net程序开发中避免编译就要重新登录系统的小技巧
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
- SVG + Javascript + ASP.NET + WebService开发楼宇管理系统 - 杂记1
- 用ASP、NET开发下载系统
- SVG + Javascript + ASP.NET + WebService开发楼宇管理系统 - 杂记3(完)
- 基于ASP.NET开发网上客观题测试系统
- SVG + Javascript + ASP.NET + WebService开发楼宇管理系统(四)