sso【跨域】单点登录【解决附赠200分】
任务: 写一个单点登录接口。
目的:来整合其他的网站(可能是jsp asp php ...做的),实现sso。
表现:也就是整合进来的网站,只要符合我的接口标准,都可以单点登录。
条件:目前所有的用户都在一个表里放置。
具体要求:
1、 A用户在www.mysite1.com登录成功后,无论是点击链接,或是在地址栏输入www.mysite2.com都可以在mysite2显示登录状态。
到其他的网站也是一个样子。
2、单点注销,同上,A用户在mysite1注销后,访问其他网站同样是注销状态。
求源码实现!解决附赠200分
[解决办法]
sso up
没研究过
[解决办法]
cas部署你会不会;代码部分可以在考虑
[解决办法]
我看cas太麻烦了,就自己写了一个
http://xblue3.download.csdn.net/
我自己写过一个模块,呵呵
<基于对称加密的简单单点登录系统sso>
http://download.csdn.net/source/619881
用servlet,对称加密实现的单点登录!
可以跨域,不使用cookies的!
初步代码!
laiqinyi#at#gmail.com
用的是PBEWithMD5AndDES的对称加密,还用SHA-1等摘要算法!
理论上比较安全的,呵呵,你帮忙测试一下?
[解决办法]
PBEWithMD5AndDES
有什么成盐因子,密钥,什么的,应该够强悍了!
[解决办法]
Cookie里有个方法setDomain()方法,可以将Cookie发给其他服务器~
[解决办法]
app_company varchar2(50), /*用户所属分公司*/
app_department varchar2(50), /*用户所在的部门*/
app_user varchar2(15), /*在该系统中的用户名*/
app_passwd varchar2(15), /*在该系统中的密码*/
app_cookie varchar2(30), /*COOKIE名称*/
form_user varchar2(20), /*认证页面中FORM的用户名字段*/
form_passwd varchar2(20), /*认证页面中FORM的密码字段*/
app_special varchar2(20) /*其他*/
);
通过IFRAME或超连接方式集成目标系统,并进行SSO
通过IFRAME或超连接方式集成目标系统,并在URL中带上用户名和密码。如集成DOMINO可采用如下方式:
<IFRAME src=http://host1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf
width="100%" frameborder="0" align="center" height="100%" hspace="0" marginheight="0" marginwidth="0" scrolling="yes" style="background-color:#f7f7ff;">
</IFRAME>
或:
Href src=“http://localhost/names.nsf?Login&Username=admin&Password=password&RedirectTo=/names.nsfhost1/names.nsf?Login&Username=admin&Password=pass&RedirectTo=/names.nsf”
以上采用的是在HTTP中直接传递明码,为提高安全性,可采用HTTPS来传递用户名和密码。另外采用这种方式被集成的系统必须支持FORM方式认证。J2EE应用,DOMINO等都支持FORM认证。
这两种方式如果SSO成功,就自动进入目标系统的界面,如果实现会显示目标系统的登录界面。其效果图如下:
登录界面
这种方式,必须维护对应关系表,如上面的sso_info。更好的方式是提供界面,让最终用户自己维护这种对应关系,可模仿Compoze portlets for lotus的做法,在用户第一次进入要与之做SSO的系统时,如DOMINO系统,显示一个界面,让用户自己输入他在该系统中的用户名/密码等信息。并保存到表中或LDAP等其他数据源中。以后用户要进入这些系统时,就直接从表中或其他数据源中取用户的用户名/密码等信息,帮助用户做认证。建议采用这种方式。如下图所示。如果用户改变了自己在DOMINO系统中的用户名,密码。从门户系统进入DOMINO系统时,认证会失败,就重新显示类似下面的界面。让用户重新输入他在DOMINO系统中新的用户名,密码并保存。
认证失败
以上这种实现方式,一般需要浏览器支持COOKIE,所以要注意浏览器的配置,在开发阶段,为方便调试,可设置IE,让它显示COOKIE的名称。如下所示:
浏览器的配置
采用这种方式,对要集成的系统不需要做任何的改动。如果PORTAL系统中的用户在被集成的系统中的权限都一样,可采用建立一个通用用户的做法。也就是所有在PORTAL系统中的用户都采用这个通用用户进入目标系统。这种方式等于是采用页面集成方式做集成。比较方便使用。另外,有时候需要采用调用API,或配置Adapter等应用集成方式来集成其他系统,一般也是通过定义一个连接专用的用户。在API中或在配置Adapter的时候写死。如采用JAVA API方式集成DOMINO:
lotus.domino.Session dominoSession = NotesFactory.createSession(dominoServer, “admin”, “password”);
CS结构实现方式
经常有人问CS结构的应用如何实现SSO,本人的建议是对这种系统不要自己去实现SSO。很麻烦,其实输个用户名,密码没什么大不了的。如果要实现,一是采用商业软件。另外也可以采用以下方式:在PORTAL的PORTLET上建立超连接。并通过APPLET方式启动CS结构的应用系统的登录界面。然后通过如下的方式把用户名/密码传递过去。
-不能做任何改动的客户端 - WIN消息(给登录窗口发送用户名,密码等登录所需要的信息),模拟键盘(java有模拟键盘输入的API)
-可以做改动的客户端 - 参数传递,并让登录的EXE文件读取参数进行认证。
因为要让APPLET执行本地的EXE文件,所以必须对IE中的JRE的安全进行设置。
对IE中的JRE的安全进行设置
其他:
在采用以上方式实现了SSO后,要注意LOGOUT,可采用与LOGIN相同的方式。也可以通过被集成系统的超时设置来实现。
[解决办法]