lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
阅读:1390回复:9

不同应用程序之间共享Session的问题

楼主#
更多 发布于:2006-02-16 09:23
现在有个垃圾需求:

要求将两个应用程序(一个是LAMP的,一个是JSP的)整合在一起,也就是说,通过公共的一个页面登陆任何一个应用程序,用户的信息保存在Session中(手机浏览器不支持Cookie),现在要求这两个应用程序共享一个Session,这样就避免了访问另一个应用程序的时候重新登陆的现象。

松百,0000,灭绝 出来出来,发表点看法。
无。
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
1C#
发布于:2006-02-19 20:58
Re:不同应用程序之间共享Session的问题
Domino/JBoss SSO (Single Sign On)

http://www.keysolutions.com/webhome/domino_jboss_sso.html
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
2C#
发布于:2006-02-19 20:57
Re:不同应用程序之间共享Session的问题
A Walking tour of J2EE SSO Sample Application
http://www.spikesource.com/docs/cs_1.6.0-win32/doc/ssosample/tour.html

Jboss SingleSignOn  
http://www.jboss.org/wiki/Wiki.jsp?page=SingleSignOn

HOW-TO: Integrating JOSSO with JBoss 4
http://www.josso.org/jboss4-howto.html
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
3C#
发布于:2006-02-19 17:51
Re:不同应用程序之间共享Session的问题
拜托
给点有建设性的意见好不好?

据说Jboss有一个东东可以解决这个问题,有这么一说吗
无。
万贤
作家
作家
  • 铜币1枚
  • 威望24点
  • 贡献值1点
4C#
发布于:2006-02-17 00:20
Re:不同应用程序之间共享Session的问题
我的妈呀太长了~
只知道session比cookie安全,好一些吧?
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
5C#
发布于:2006-02-16 18:27
Re:不同应用程序之间共享Session的问题
http://www2.ccw.com.cn/05/0536/d/0536d06_2.asp
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
suchasplus
作家
作家
  • 铜币16枚
  • 威望11点
  • 贡献值1点
6C#
发布于:2006-02-16 18:24
Re:不同应用程序之间共享Session的问题
或许你可以考虑Kerberos



Kerberos:网络认证协议

(Kerberos: Network Authentication Protocol)

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

认证过程具体如下:客户机向认证服务器(AS)发送请求,要求得到某服务器的证书,然后 AS 的响应包含这些用客户端密钥加密的证书。证书的构成为: 1) 服务器 “ticket” ; 2) 一个临时加密密钥 (又称为会话密钥 “session key”) 。客户机将 ticket (包括用服务器密钥加密的客户机身份和一份会话密钥的拷贝)传送到服务器上。会话密钥可以(现已经由客户机和服务器共享)用来认证客户机或认证服务器,也可用来为通信双方以后的通讯提供加密服务,或通过交换独立子会话密钥为通信双方提供进一步的通信加密服务。

上述认证交换过程需要只读方式访问 Kerberos 数据库。但有时,数据库中的记录必须进行修改,如添加新的规则或改变规则密钥时。修改过程通过客户机和第三方 Kerberos 服务器(Kerberos 管理器 KADM)间的协议完成。有关管理协议在此不作介绍。另外也有一种协议用于维护多份 Kerberos 数据库的拷贝,这可以认为是执行过程中的细节问题,并且会不断改变以适应各种不同数据库技术。

协议结构

  Kerberos 信息:

客户机/服务器认证交换
 

信息方向 信息类型
客户机向 Kerberos KRB_AS_REQ
Kerberos 向客户机 KRB_AS_REP或KRB_ERROR
<  
客户机/服务器认证交换
 

信息方向 信息类型
客户机向应用服务器 KRB_AP_REQ
[可选项] 应用服务器向客户机 KRB_AP_REP或 KRB_ERRORR

票证授予服务(TGS)交换
 

信息方向 信息类型
客户机向 Kerberos KRB_TGS_REQ
Kerberos 向客户机 KRB_TGS_REP或KRB_ERROR

KRB_SAFE 交换
KRB_PRIV 交换
KRB_CRED 交换  


统一用户认证和单点登录解决方案

■ 康威 李凯


--------------------------------------------------------------------------------
 

本文以某新闻单位多媒体数据库系统为例,提出建立企业用户认证中心,实现基于安全策略的统一用户管理、认证和单点登录,解决用户在同时使用多个应用系统时所遇到的重复登录问题。

随着信息技术和网络技术的迅猛发展,企业内部的应用系统越来越多。比如在媒体行业,常见的应用系统就有采编系统、排版系统、印刷系统、广告管理系统、财务系统、办公自动化系统、决策支持系统、客户关系管理系统和网站发布系统等。由于这些系统互相独立,用户在使用每个应用系统之前都必须按照相应的系统身份进行登录,为此用户必须记住每一个系统的用户名和密码,这给用户带来了不少麻烦。特别是随着系统的增多,出错的可能性就会增加,受到非法截获和破坏的可能性也会增大,安全性就会相应降低。针对于这种情况,统一用户认证、单点登录等概念应运而生,同时不断地被应用到企业应用系统中。

统一用户管理的基本原理

一般来说,每个应用系统都拥有独立的用户信息管理功能,用户信息的格式、命名与存储方式也多种多样。当用户需要使用多个应用系统时就会带来用户信息同步问题。用户信息同步会增加系统的复杂性,增加管理的成本。

例如,用户X需要同时使用A系统与B系统,就必须在A系统与B系统中都创建用户X,这样在A、B任一系统中用户X的信息更改后就必须同步至另一系统。如果用户X需要同时使用10个应用系统,用户信息在任何一个系统中做出更改后就必须同步至其他9个系统。用户同步时如果系统出现意外,还要保证数据的完整性,因而同步用户的程序可能会非常复杂。

解决用户同步问题的根本办法是建立统一用户管理系统(UUMS)。UUMS统一存储所有应用系统的用户信息,应用系统对用户的相关操作全部通过UUMS完成,而授权等操作则由各应用系统完成,即统一存储、分布授权。UUMS应具备以下基本功能:

1.用户信息规范命名、统一存储,用户ID全局惟一。用户ID犹如身份证,区分和标识了不同的个体。

2.UUMS向各应用系统提供用户属性列表,如姓名、电话、地址、邮件等属性,各应用系统可以选择本系统所需要的部分或全部属性。

3.应用系统对用户基本信息的增加、修改、删除和查询等请求由UUMS处理。

4.应用系统保留用户管理功能,如用户分组、用户授权等功能。

5.UUMS应具有完善的日志功能,详细记录各应用系统对UUMS的操作。

统一用户认证是以UUMS为基础,对所有应用系统提供统一的认证方式和认证策略,以识别用户身份的合法性。统一用户认证应支持以下几种认证方式:

1. 匿名认证方式: 用户不需要任何认证,可以匿名的方式登录系统。

2. 用户名/密码认证: 这是最基本的认证方式。

3. PKI/CA数字证书认证: 通过数字证书的方式认证用户的身份。

4. IP地址认证: 用户只能从指定的IP地址或者IP地址段访问系统。

5. 时间段认证: 用户只能在某个指定的时间段访问系统。

6. 访问次数认证: 累计用户的访问次数,使用户的访问次数在一定的数值范围之内。

以上认证方式应采用模块化设计,管理员可灵活地进行装载和卸载,同时还可按照用户的要求方便地扩展新的认证模块。

认证策略是指认证方式通过与、或、非等逻辑关系组合后的认证方式。管理员可以根据认证策略对认证方式进行增、删或组合,以满足各种认证的要求。比如,某集团用户多人共用一个账户,用户通过用户名密码访问系统,访问必须限制在某个IP地址段上。该认证策略可表示为: 用户名/密码“与”IP地址认证。

PKI/CA数字证书认证虽不常用,但却很有用,通常应用在安全级别要求较高的环境中。PKI(Public Key Infrastructure)即公钥基础设施是利用公钥理论和数字证书来确保系统信息安全的一种体系。

在公钥体制中,密钥成对生成,每对密钥由一个公钥和一个私钥组成,公钥公布于众,私钥为所用者私有。发送者利用接收者的公钥发送信息,称为数字加密,接收者利用自己的私钥解密; 发送者利用自己的私钥发送信息,称为数字签名,接收者利用发送者的公钥解密。PKI通过使用数字加密和数字签名技术,保证了数据在传输过程中的机密性(不被非法授权者偷看)、完整性(不能被非法篡改)和有效性(数据不能被签发者否认)。

数字证书有时被称为数字身份证,数字证书是一段包含用户身份信息、用户公钥信息以及身份验证机构数字签名的数据。身份验证机构的数字签名可以确保证书信息的真实性。

完整的PKI系统应具有权威认证机构CA(Certificate Authority)、证书注册系统RA(Registration Authority)、密钥管理中心KMC(Key Manage Center)、证书发布查询系统和备份恢复系统。CA是PKI的核心,负责所有数字证书的签发和注销; RA接受用户的证书申请或证书注销、恢复等申请,并对其进行审核; KMC负责加密密钥的产生、存贮、管理、备份以及恢复; 证书发布查询系统通常采用OCSP(Online Certificate Status Protocol,在线证书状态协议)协议提供查询用户证书的服务,用来验证用户签名的合法性; 备份恢复系统负责数字证书、密钥和系统数据的备份与恢复。

单点登录

单点登录(SSO,Single Sign-on)是一种方便用户访问多个系统的技术,用户只需在登录时进行一次注册,就可以在多个系统间自由穿梭,不必重复输入用户名和密码来确定身份。单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享。当用户登录系统时,客户端软件根据用户的凭证(例如用户名和密码)为用户建立一个安全上下文,安全上下文包含用于验证用户的安全信息,系统用这个安全上下文和安全策略来判断用户是否具有访问系统资源的权限。遗憾的是J2EE规范并没有规定安全上下文的格式,因此不能在不同厂商的J2EE产品之间传递安全上下文。  
图1 SSO原理示意图


目前业界已有很多产品支持SSO,如IBM的WebSphere和BEA的WebLogic,但各家SSO产品的实现方式也不尽相同。WebSphere通过Cookie记录认证信息,WebLogic则是通过Session共享认证信息。Cookie是一种客户端机制,它存储的内容主要包括: 名字、值、过期时间、路径和域,路径与域合在一起就构成了Cookie的作用范围,因此用Cookie方式可实现SSO,但域名必须相同; Session是一种服务器端机制,当客户端访问服务器时,服务器为客户端创建一个惟一的SessionID,以使在整个交互过程中始终保持状态,而交互的信息则可由应用自行指定,因此用Session方式实现SSO,不能在多个浏览器之间实现单点登录,但却可以跨域。

实现SSO有无标准可寻?如何使业界产品之间、产品内部之间信息交互更标准、更安全呢?基于此目的,OASIS(结构化信息标准促进组织)提出了SAML解决方案(有关SAML的知识参看链接)。

用户认证中心实际上就是将以上所有功能、所有概念形成一个整体,为企业提供一套完整的用户认证和单点登录解决方案。一个完整的用户认证中心应具备以下功能:

1. 统一用户管理。实现用户信息的集中管理,并提供标准接口。

2. 统一认证。用户认证是集中统一的,支持PKI、用户名/密码、B/S和C/S等多种身份认证方式。  
图2 统一用户认证与单点登录设计模型


3. 单点登录。支持不同域内多个应用系统间的单点登录。

用户认证中心提供了统一认证的功能,那么用户认证中心如何提供统一授权的功能呢?这就是授权管理中,其中应用最多的就是PMI。

PMI(Privilege Management Infrastructure,授权管理基础设施)的目标是向用户和应用程序提供谌ü芾矸瘢峁┯没矸莸接τ檬谌ǖ挠成涔δ埽峁┯胧导视τ么砟J较喽杂Φ摹⒂刖咛逵τ孟低晨⒑凸芾砦薰氐氖谌ê头梦士刂苹疲蚧咛逵τ孟低车目⒂胛ぁMI是属性证书(Attribute Certificate)、属性权威(Attribute Authority)、属性证书库等部件的集合体,用来实现权限和证书的产生、管理、存储、分发和撤销等功能。

PMI以资源管理为核心,对资源的访问控制权统一交由授权机构统一处理,即由资源的所有者来进行访问控制。同公钥基础设施PKI相比,两者主要区别在于: PKI证明用户是谁,而PMI证明这个用户有什么权限,能干什么,而且PMI可以利用PKI为其提供身份认证。

单点登录通用设计模型

图2是统一用户认证和单点登录通用设计模型,它由以下产品组成:

1. PKI体系: 包括CA服务器、RA服务器、KMC和OCSP服务器。

2. AA管理服务器: 即认证(Authentication)和授权(Authorization)服务器,它为系统管理员提供用户信息、认证和授权的管理。

3. UUMS模块: 为各应用系统提供UUMS接口。

4. SSO: 包括SSO代理和SSO服务器。SSO代理部署在各应用系统的服务器端,负责截获客户端的SSO请求,并转发给SSO服务器,如果转发的是OCSP请求,则SSO服务器将其转发给OCSP服务器。在C/S方式中,SSO代理通常部署在客户端。

5. PMI: 包括PMI代理和PMI服务器。PMI代理部署在各应用系统的服务器端,负责截获客户端的PMI请求,并转发给PMI服务器。

6. LDAP服务器: 统一存储用户信息、证书和授权信息。

为判断用户是否已经登录系统,SSO服务器需要存储一张用户会话(Session)表,以记录用户登录和登出的时间,SSO服务器通过检索会话表就能够知道用户的登录情况,该表通常存储在数据库中。AA系统提供了对会话的记录、监控和撤消等管理功能。为保证稳定与高效,SSO、PMI和OCSP可部署两套或多套应用,同时提供服务。

链接

SAML

SAML(Security Assertion Markup Language,安全性断言标记语言)是一种基于XML的框架,主要用于在各安全系统之间交换认证、授权和属性信息,它的主要目标之一就是SSO。在SAML框架下,无论用户使用哪种信任机制,只要满足SAML的接口、信息交互定义和流程规范,相互之间都可以无缝集成。SAML规范的完整框架及有关信息交互格式与协议使得现有的各种身份鉴别机制(PKI、Kerberos和口令)、各种授权机制(基于属性证书的PMI、ACL、Kerberos的访问控制)通过使用统一接口实现跨信任域的互操作,便于分布式应用系统的信任和授权的统一管理。

SAML并不是一项新技术。确切地说,它是一种语言,是一种XML描述,目的是允许不同安全系统产生的信息进行交换。SAML规范由以下部分组成:

1. 断言与协议: 定义XML格式的断言的语法语义以及请求和响应协议。SMAL主要有三种断言: 身份认证断言、属性断言和访问授权断言。

2. 绑定与配置文件: 从SAML请求和响应消息到底层通信协议如SOAP或SMTP的映射。

3. 一致性规范: 一致性规范设置了一种基本标准,必须满足这一SAML标准的实现才能够称为一致性实现。这样有助于提高互操作性和兼容性。

4. 安全和保密的问题: SAML体系结构中的安全风险,具体而言就是SAML如何应对这些风险以及无法解决的风险。

要注意的是,SAML并不是专为SSO设计,但它却为SSO的标准化提供了可行的框架
 
The history of these days will be written in blood... By crushing the armies of our enemy, by seizing the weapons they thought to turn against us, we were fighting for our very existence!
0000
作家
作家
  • 铜币143枚
  • 威望34点
  • 贡献值1点
7C#
发布于:2006-02-16 10:24
Re:不同应用程序之间共享Session的问题
oooo....
.--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/
lijiannan_1981
著名写手
著名写手
  • 铜币15枚
  • 威望0点
  • 贡献值0点
8C#
发布于:2006-02-16 09:33
Re:不同应用程序之间共享Session的问题
这可是现在讨论极火的单点登录问题。好象微软的 BizTalk 就可以解决


别这样呀
总得给个方案解决吧
无。
松柏
论坛版主
论坛版主
  • 铜币371枚
  • 威望39点
  • 贡献值0点
  • 社区居民
9C#
发布于:2006-02-16 09:24
Re:不同应用程序之间共享Session的问题
这可是现在讨论极火的单点登录问题。
好象微软的 BizTalk 就可以解决
[color=#0000FF]馋嘴蜗牛[/color] 我的博客:[url]http://osnaile.osdn.cn/[/url]
游客

返回顶部