多站点单点登录(SSO)设计

这是一个老话题了,当前各门户一般也都实现了多个业务之间的单点登录。下面根据 我经历过的项目,谈一下我自己的看法。

为什么需要单点登录:

产品刚上线时,一般由于用户量少,所有的功能都放在一起,一般也不需要具体的单 点登录。随着用户量和业务发展的需要,要求逐步将产品按功能或性能分为相应独立的站 点,并分开部署,这就需要在各个站点之间进行单点登录,以达到用户一次登录,就可以 使用多个站点。

单点登录的实现:

简单方法: 在同一个域内的站点,可以简单的通过共享Cookie(将登录用户名存放 Cookie中)来实现单点登录。这种方法实现简单,安全性方法可以通过将Cookie值加密方 式加强,但对不同域下及不同开发语言下(如A站点C#,B站点C)实现麻烦。

推荐方法:建立统一的认证中心,认证中心提供:

1、用户登录认证(认证用户名和密码),如果成功,返回表示本次登录的登录 Token

2、登录Token认证(认证Token是否正确),如果成功,返回当前登录的用户名

3、延长Token有效期

4、退出(使Token失效)

认证中心独立于各个站点,单点流程一般场景如下:

1、用户在站点A输入用户名和密码点击登录

2、站点A将用户名和密码转发给认证中心进行认证,认证中心返回Token

3、站点A将当前登录用户和Token存入Session(或Cookie)

4、在站点A上点击连接访问站点B,通过URL参数方式,将Token带给站点B

5、站点B将Token转交到认证中心,认证正确,返回当前用户名。

6、站点B将当前登录用户和Token存入Session(或Cookie),完成登录流程

这样的设计下的Token,还可以用在异步使用Ajax去访问服务器端的接口(接口可能独 立部署在不同的站点下),这样只需要带上Token,服务器端的接口认证Token通过后,直 接返回这个登录用户的相应用户信息。

安全性考虑:

1、用户登录认证接口,可增加认证频率、认证IP等限制,防止暴力攻击

2、Token其实就是一串表示本次登录的唯一字符串,可以生成字符串时,增加摘要信 息。如Token的组成为:A+MD5(A+PWD) 的方式,A为随机生成的GUID,这样在验证Token时 ,就可以直接通过算法来验证合法性,只有算法验证通过后,再进行下一步的操作。

以上只是从整体上描述统一认证的设计,中间还有很多细节没有描述出来,需要了解 的我们可进一步讨论。

下一篇,准备写一下认证中心内部,如何实现分布式认证系统,支持高并发、防攻击 等方面内容。

时间: 2024-09-29 17:03:26

多站点单点登录(SSO)设计的相关文章

企业门户应用整合中单点登录(SSO)的技术实现与应用

1 引 言 企业在信息化建设过程中,由于经常采用逐步信息化的方式,因此会造成企业内部各个应用系统的用户目录不完全兼容,各应用系统相互孤立,形成"信息孤岛".信息孤岛的存在,使得信息系统用户需要做重复的登录.因此实际中,需要一个统一的用户登录管理系统平台,来实现用户统一身份验证.用户登录到某一应用系统(通常是门户站点,如办公自动化系统)后,当需要访问其他应用系统时,不必登录就可以直接进入应用系统. 单点登录系统平台采用统一的用户信息数据库,实现用户统一验证.从用户的角度只需进行一次登录就

单点登录接口设计

问题描述 我这里要开发项目,要登陆远程一个公共站点A网址,在那个页面进行了数据id和pwd后,验证成功后跳转我开发的页面,返回来的时候有用户名(用户名怎么来的?)和一些个人信息?现在远程站点给我一个单点登录接口设计文档,这里的过程是怎么样的?有谁可说的详细些,头大来着! 解决方案 解决方案二:不同的人开发的单点登录都是不一样的,问我们没结果的.人家文档肯定说清楚.明白怎么作了.要不然要这文档干嘛?解决方案三:>>"在那个页面进行了数据id和pwd后"你还是回去重念语文比较好

.net 单点登录的设计与实践_实用技巧

前言 最近轮到我在小组晨会来分享知识点,突然想到单点登录,准备来分享下如何实现单点登录,所以有了下文.实现方案以及代码可能写得不是很严谨,有漏洞的地方或者错误的地方欢迎大家指正. 刚开始头脑中没有思路,直接在博客园里面看看别人是如何来实现的,看了几篇文章发现,发现解决方案有点问题,或者说不算实现了单点登录 名称定义 为了方便说明先说明几个文中出现的名词的含义: P站:统一登录授权验证中心,demo中 域名是www.passport.com:801 A站:处于不同域名下的测试网站,demo中 域名

详解可跨域的单点登录(SSO)实现方案【附.net代码】_实用技巧

SSO简介 定义: 传统的单站点登录访问授权机制是:登录成功后将用户信息保存在session中,sessionId保存在cookie中,每次访问需要登录访问的资源(url)时判断当前session是否为空,为空的话跳转到登录界面登录,不为空的话允许访问.  单点登录是一种多站点共享登录访问授权机制,访问用户只需要在一个站点登录就可以访问其它站点需要登录访问的资源(url).用户在任意一个站点注销登录,则其它站点的登录状态也被注销.简而言之就是:一处登录,处处登录.一处注销,处处注销. 应用场景:

网页-java单点登录SSO,模拟登录

问题描述 java单点登录SSO,模拟登录 要做一个Java单点登录系统,用户登录系统后,可以直接跳转到所需的子系统主页,无需再输入用户名密码.网上查了些资料,准备用cas实现,但发现子系统有权限管理,举个例子,用户所属部门不同,能访问的某个子系统的主页也不一样,cas貌似无法解决,想问下cas是不是真的没办法解决这个问题? 后来准备自己手动实现,有一个子系统是get方式传递用户名密码,自不必说,很容易实现.但有好几个是post方式传参,我开始使用HttpURLConnection模拟登录,但未

CAS单点登录(SSO)完整教程

CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server), 官网:http://www.jasig.org/cas 本教程环境: Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.3.1.cas-server-

CAS解决单点登录SSO

关于CAS很多的原理和基础的配置启动,网上是很多的,我更多是结合我的实践和心得.需要了解CAS的原理,认证协议,认证流程,可以参考以下文章. 让CAS支持客户端自定义登陆页面--客户端篇 CAS原理与配置-基于CAS的单点登陆的研究(上) 服务端配置 CAS单点登陆部署 CAS配置手册 CAS单点登录配置 背景 单点登录(SSO)是企业开发的重要问题,在我的毕设项目中,由于要和系统其他开发模块共用用户认证模块,方便共享用户资源,所以需要一个好的SSO解决方案. 一般SSO的实现机制有两种:基于s

单点登录SSO简介

一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证. 二.单点登录解决了什么问题 解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录. 三.单点登录的技术实现机制 如下图所示: 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录:根据用户提供的登录信息,认证系统

如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)

如何在多台服务器上共享Session(PHP/JSP/ASP.NET)以及单点登录(SSO)   Apache Session复制: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html   使用Memcached来共享PHP Session: https://www.digitalocean.com/community/tutorials/how-to-share-php-sessions-on-multiple-memcache