单点登录系统,简称SSO。以下是我花了几个小时写的一个简单实现。特把实现思路和大家分享。

背景:某项目使用ASP.NET MemberShip来做会员系统,需要同时登录多个系统。而项目的开发人员无法在MemberShip基础上做单点登录。

故这个单点登录系统需要能无缝集成到这些系统中的任何系统中,作为服务端。

下面我们来看看具体的实现步骤,没耐心看完的朋友可直接上github上查阅:(https://github.com/newmin/cms/blob/master/extend/Ops.Cms.Extend/SSO/):

一.  定义SSO的主要方法:

1. 客户端需要包含:登录,登出,获取会话

 1 using System;
2 using System.Web;
3 using Ops.Cms.Extend.SSO;
4
5 namespace Ops.Cms.Extend.SSO.Client
6 {
7 public interface ISessionClient
8 {
9 /// <summary>
10 /// 处理SSO请求
11 /// </summary>
12 /// <param name="context"></param>
13 void HandleSsoRequest(HttpContext context);
14
15 /// <summary>
16 /// 获取会话
17 /// </summary>
18 /// <param name="sessionKey"></param>
19 /// <returns></returns>
20 SessionResult GetSession(String sessionKey);
21
22 /// <summary>
23 /// 获取会话Key
24 /// </summary>
25 /// <returns></returns>
26 String GetSessionKey();
27
28 /// <summary>
29 /// 同步登陆
30 /// </summary>
31 /// <param name="user"></param>
32 /// <param name="pwd"></param>
33 /// <returns></returns>
34 SsoResult Login(String user, String pwd);
35
36 /// <summary>
37 /// 同步登出
38 /// </summary>
39 /// <param name="sessionKey"></param>
40 /// <returns></returns>
41 SsoResult Logout(String sessionKey);
42 }
43 }

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

教你开发asp.net的单点登录系统的更多相关文章

  1. 单点登录系统(SSO)的开发思路

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  2. 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  3. SSO - 我们为何需要单点登录系统

    SSO,Single Sign On,也就是单点登录,保证一个账户在多个系统上实现单一用户的登录 现在随着网站的壮大,很多服务会进行拆分,会做SOA服务,会使用dubbo做微服务,或者简单的小型分布式 ...

  4. 单点登录系统CAS筹建及取得更多用户信息的实现

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. 单点登录系统实现基于SpringBoot

    今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...

  6. 开源单点登录系统CAS入门

    一.什么是CAS CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以 ...

  7. 【SSO】单点登录系统

    一.单点登录系统介绍 对于一个开发项目来说,每个项目都必不可少要有登录的这个功能.但是随着项目的变大,变大,再变大.系统可能会被拆分成多个小系统,咱们就拿支付宝和淘宝来说,咱们在淘宝上购物,然后就可以 ...

  8. 单点登录系统(SSO)详细设计说明书(上篇)

    1.引言 1.1编写目的 为了单点登录系统(SSO系统)的可行性,完整性,并能按照预期的设想实现该系统,特编写需求说明书.         同时,说明书也发挥与策划和设计人员更好地沟通的作用. 1.2 ...

  9. CAS单点登录系统入门--分布式登录验证

    1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要 ...

随机推荐

  1. IOS开发之微信山寨版

    为了犒劳自己的学习内容,就山寨个微信的视图控制吧.拿着微信,仔细的看了一下,主要用到了TabBarController以及配置TabBarItem, NavigationController以及配置N ...

  2. Objective-C中的Block回调模式

    在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block.感觉比委托回调和目标方法回调用着要顺手,好不好用还得读者亲自用一下才知道.如果 读者之前用过SS ...

  3. 如何部署Icinga客户端

    Icinga客户端的部署相对于服务器端来说,简单很多.对于服务器端来说,如果要通过以下这种方式来监控服务器,必须包含三个组件,Icinga内核,Icinga插件,NRPE(Nagios Remote ...

  4. swift 如何实现点击view后显示灰色背景

    有这样一种场景,当我们点击view的时候,需要过0.几秒显示一个灰色或者别的颜色的背景 用button来实现,只有按下去的时候才会出现,往往在快速按下,快速抬起的时候是看不出这个变化的 下边是解决方案 ...

  5. C语言 第五章 循环结构练习

    一.计算15+16+17 …98+99的和 for实现 #include "stdio.h" void main() { //15+16+17 …98+99 ; ;i<=;i ...

  6. 附录D 安装ZooKeeper

    D.1    安装ZooKeeper D.1.1   下载ZooKeeper ZooKeeper是Apache基金会的一个开源.分布式应用程序协调服务,是Google的Chubby一个开源的实现.它是 ...

  7. Ubuntu下搭建ryu环境

    RYU环境搭建总共四步: step1:首先下载相应的python套件,并且更新pip $ sudo apt-get install python-pip python-dev build-essent ...

  8. 大型网站提速关键技术(页面静态化,memcached,MySql优化)(二)

    一:页面静态化 几个概念: 静态网址:(比如:http://localhost/abc.html) 特点:1.利用seo(search engine optimization) 搜索引擎优化;2:访问 ...

  9. 用于后台管理的列表数据控件:DataGrid和Select

    常听人说不喜欢javascript.然而我一个一直用C#做后端的人,最喜欢的编程语言就是javascript了,我接收它的优点,也接收它的缺点! 前段时间接触过easyui,用过里面的DataGrid ...

  10. HTML5 Application cache初探和企业应用启示

    Application Cache 在自己做的开源项目( https://github.com/etoah/Lucien ) 用到了HTML5 的Application Cache,现总结如下: 目录 ...