[quote]JBoss下的单点登陆(SSO)技术实现分析(1)http://esffor.iteye.com/blog/168291
导读:
本文介绍了单点登陆(SSO, Single Sign On)的实现原理,详细地解释了单点登陆的实现原理以及实现过程中的关键点和相关选项的含义,并且通过Josso与JBoss服务器的集成,简要介绍了在JBoss环境中单点登陆的实施。
随着互联网的不断发展,各种网络化应用服务的不断普及,在大中型企业中,用户可能每天需要登录到许多不同的信息应用系统,如协同办公系统、邮件系统、文件关系系统、各种网络化的应用服务等。而每个系统都要求拥护遵循它们所定义的一套安全策略,比如要求输入用户名和密码。随着用户所拥有的服务的不断增多,用户登陆所带来的出错可能性便会随之增加,信息受到非法截获和破坏的可能性也会增大,系统的安全性就会相应降低。同时对于系统管理员来说他除了要管理用户的用户名和密码之外,还需要对不同的用户进行相应安全策略的设置。这样就势必造成了系统和安全管理资源的开销,降低了生产效率,同时还增加了企业IT部门的管理成本。为了解决以上的问题,现在很多企业在进行信息化实施的过程中引入了单点登陆,就是先通过一个应用程序的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。当然,要求该用户使用的用户名和口令在访问的应用中一致,且拥有足够权限。下面我们将通过Josso与JBoss的集成的单点登陆(SSO)的实例,对单点登陆(SSO)的原理及其在JBoss环境下的技术实现进行更进一步的分析。
1. 什么是单点登陆(SSO)
单点登录(SSO,Single Sign On)是指在分布式环境下,整个系统只有一个可以登录进入的点,它对所有的请求(Request)都是通用的。单点登录可以保证用户能够访问到可以访问的资源,如果有一个未被授权的请求要求访问被保护的资源,这个请求将自动被导向到相应的验证点进行登录验证。
2. 单点登录(SSO)的实现原理
(1) 登陆点。理想的情况是用户通过任何应用系统都能进行登陆,而且效果一样。这种单一的登陆点在整个系统的设计中是唯一认证用户的地方,由登陆点将相应的用户信息传递给应用系统,应用系统利用这些信息来进行用户的验证。
(2) 应用系统的单点登录(SSO)集成。并不是任何系统都能够使用SSO,只有那些符合SSO规范,使用SSO API的应用系统才具有SSO的功能。简单地说就是要修改已有的应用系统,屏蔽已有的应用系统的用户认证模块,使用系统提供的SSO API来验证用户,以及对用户的操作进行授权。
(3) 统一的认证,权限信息库。通常SSO要求有统一的认证,权限存放库。但现实中,有的系统无法使用外部的认证,授权信息库,所以就需要在应用系统和SSO认证系统之间进行认证,同时进行授权信息的数据同步。
实现描述:在用户成功通过SSO认证系统认证之后,系统提供的映射授予权限来为用户登录到其有权可以使用的应用系统。系统提供的映射取消用户权限来实现用户的注销功能。 进入讨论组讨论。
用户存取由SSO认证系统所提供的安全策略,SSO会话服务保存了对用户授权的证明,这样就不再需要用户重新进行身份验证。在这种方式下,用户就拥有了访问通过SSO应用系统集成的应用服务的权限,我们提供的SSO Session将会为它保持会话服务。(见图1)
图1 SSO登陆过程[img][/img]
同时,SSO应用系统还包括的与登录恰恰相反的,统一的注销点,即用户注销,就失去了应用系统集成的应用服务的访问权限。(见图2)
图2 SSO注销过程
3. Josso与JBoss集成的单点登录(SSO)环境的搭建
(1)、部署环境的准备及配置。
在搭建单点登陆(SSO)开发环境之前,需要准备的开发工具有:
JDK1.5.04 (http://java.sun.com)
JBoss 4.0.4GA (http://www.jboss.org)
josso-1.4.tar (http://www.josso.org)
MySQL5.0和MySQL的JDBC驱动mysql-connector-java-3.1.13-bin.jar (http://www.mysql.org)
需要设置的环境有:
JAVA_HOME = C:\Program Files\Java\jdk1.5.0_09
JBOSS_HOME = D:\JBoss4.0.5GA
JOSSO_HOME = D:\josso1.4
(2)、定义用户模型和安全策略。这里我们采用JAAS的用户模型进行数据模型的设计(如图3)。
图3 SSO的用户模型
同时,向数据库里添加一些数据。以上操作的SQL脚本另见附件createdb.sql。
(3)、配置Josso的SSO gateway。在src\resources下可以见到josso-gateway-config.xml,修改其中的设置,原文件中有关于JDBC,DataSource,LDAP等配置的模版,这里我们设置最简单的JDBC连接数据库进行认证,需要修改的有JDBC Credential Store和JDBC Credential Store。详细修改的文件见附件
JOSSO_USER : 用户的登陆验证信息
JOSSO_ROLE : 保存所有可定义的用户角色
JOSSO_USER_ROLE : 保存每个用户与角色关联的信息
JOSSO_USER_PROPERTY : 保存用户的个人信息
进入讨论组讨论。
josso-gateway-config.xml。
org.josso.gateway.identity.service.store.db.JDBCIdentityStore
SELECT login AS username , password AS password FROM josso_user WHERE login = ?
root
123456
jdbc:mysql://localhost:3306/josso_exam
com.mysql.jdbc.Driver
org.josso.gateway.identity.service.store.db.JDBCIdentityStore
SELECT login FROM josso_user WHERE login = ?
SELECT josso_role.name FROM josso_role , josso_user_role , josso_user
WHERE josso_user.login = ? AND josso_user.login = josso_user_role.login
AND josso_role.name = josso_user_role.name
SELECT ’user.description’ AS name , description AS value
FROM josso_user WHERE login = ?
UNION
SELECT name AS name , value AS value FROM josso_user_property WHERE login = ?
root
123456
jdbc:mysql://localhost:3306/josso_exam
com.mysql.jdbc.Driver
(4)、将MySQL的驱动拷贝到/src/webapp/josso/WEB-INF/lib目录下,供JDBC连接数据库时调用。
(5)、配置Josso的登陆点和注销点,在josso-agent-config.xml中修改,这里我们保持Josso系统默认的登陆和注销设置,同时注意应当把选项的localhost改为主机相对应的IP地址,否则SSO将会失效。
(6)、进入命令行模式,转到Josso的主目录下,执行build.bat war、build.bat install-jboss4和build.bat deploy-jboss4即可。
(7)、修改JBoss server\default\conf目录下的login-config.xml文件,在里面添加Josso的login模型。
flag = "required">
true
(8)、修改JBoss server/default/deploy/jbossweb-tomcat55.sar目录下的server.xml文件,在其中添加选项和选项。
appName="josso"
userClassNames="org.josso.gateway.identity.service.BaseUserImpl"
roleClassNames="org.josso.gateway.identity.service.BaseRoleImpl"
debug="1" />
(9)、启动JBoss。在浏览器中输入http://localhost:8080/partnerapp/protected,如果能转到登陆界面,然后输入用户名(user1)和密码(user1pwd)能够进行登陆,那么Josso和JBoss单点登陆(SSO)的集成就大功告成了
[/quote]
导读:
本文介绍了单点登陆(SSO, Single Sign On)的实现原理,详细地解释了单点登陆的实现原理以及实现过程中的关键点和相关选项的含义,并且通过Josso与JBoss服务器的集成,简要介绍了在JBoss环境中单点登陆的实施。
随着互联网的不断发展,各种网络化应用服务的不断普及,在大中型企业中,用户可能每天需要登录到许多不同的信息应用系统,如协同办公系统、邮件系统、文件关系系统、各种网络化的应用服务等。而每个系统都要求拥护遵循它们所定义的一套安全策略,比如要求输入用户名和密码。随着用户所拥有的服务的不断增多,用户登陆所带来的出错可能性便会随之增加,信息受到非法截获和破坏的可能性也会增大,系统的安全性就会相应降低。同时对于系统管理员来说他除了要管理用户的用户名和密码之外,还需要对不同的用户进行相应安全策略的设置。这样就势必造成了系统和安全管理资源的开销,降低了生产效率,同时还增加了企业IT部门的管理成本。为了解决以上的问题,现在很多企业在进行信息化实施的过程中引入了单点登陆,就是先通过一个应用程序的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。当然,要求该用户使用的用户名和口令在访问的应用中一致,且拥有足够权限。下面我们将通过Josso与JBoss的集成的单点登陆(SSO)的实例,对单点登陆(SSO)的原理及其在JBoss环境下的技术实现进行更进一步的分析。
1. 什么是单点登陆(SSO)
单点登录(SSO,Single Sign On)是指在分布式环境下,整个系统只有一个可以登录进入的点,它对所有的请求(Request)都是通用的。单点登录可以保证用户能够访问到可以访问的资源,如果有一个未被授权的请求要求访问被保护的资源,这个请求将自动被导向到相应的验证点进行登录验证。
2. 单点登录(SSO)的实现原理
(1) 登陆点。理想的情况是用户通过任何应用系统都能进行登陆,而且效果一样。这种单一的登陆点在整个系统的设计中是唯一认证用户的地方,由登陆点将相应的用户信息传递给应用系统,应用系统利用这些信息来进行用户的验证。
(2) 应用系统的单点登录(SSO)集成。并不是任何系统都能够使用SSO,只有那些符合SSO规范,使用SSO API的应用系统才具有SSO的功能。简单地说就是要修改已有的应用系统,屏蔽已有的应用系统的用户认证模块,使用系统提供的SSO API来验证用户,以及对用户的操作进行授权。
(3) 统一的认证,权限信息库。通常SSO要求有统一的认证,权限存放库。但现实中,有的系统无法使用外部的认证,授权信息库,所以就需要在应用系统和SSO认证系统之间进行认证,同时进行授权信息的数据同步。
实现描述:在用户成功通过SSO认证系统认证之后,系统提供的映射授予权限来为用户登录到其有权可以使用的应用系统。系统提供的映射取消用户权限来实现用户的注销功能。 进入讨论组讨论。
用户存取由SSO认证系统所提供的安全策略,SSO会话服务保存了对用户授权的证明,这样就不再需要用户重新进行身份验证。在这种方式下,用户就拥有了访问通过SSO应用系统集成的应用服务的权限,我们提供的SSO Session将会为它保持会话服务。(见图1)
图1 SSO登陆过程[img][/img]
同时,SSO应用系统还包括的与登录恰恰相反的,统一的注销点,即用户注销,就失去了应用系统集成的应用服务的访问权限。(见图2)
图2 SSO注销过程
3. Josso与JBoss集成的单点登录(SSO)环境的搭建
(1)、部署环境的准备及配置。
在搭建单点登陆(SSO)开发环境之前,需要准备的开发工具有:
JDK1.5.04 (http://java.sun.com)
JBoss 4.0.4GA (http://www.jboss.org)
josso-1.4.tar (http://www.josso.org)
MySQL5.0和MySQL的JDBC驱动mysql-connector-java-3.1.13-bin.jar (http://www.mysql.org)
需要设置的环境有:
JAVA_HOME = C:\Program Files\Java\jdk1.5.0_09
JBOSS_HOME = D:\JBoss4.0.5GA
JOSSO_HOME = D:\josso1.4
(2)、定义用户模型和安全策略。这里我们采用JAAS的用户模型进行数据模型的设计(如图3)。
图3 SSO的用户模型
同时,向数据库里添加一些数据。以上操作的SQL脚本另见附件createdb.sql。
(3)、配置Josso的SSO gateway。在src\resources下可以见到josso-gateway-config.xml,修改其中的设置,原文件中有关于JDBC,DataSource,LDAP等配置的模版,这里我们设置最简单的JDBC连接数据库进行认证,需要修改的有JDBC Credential Store和JDBC Credential Store。详细修改的文件见附件
JOSSO_USER : 用户的登陆验证信息
JOSSO_ROLE : 保存所有可定义的用户角色
JOSSO_USER_ROLE : 保存每个用户与角色关联的信息
JOSSO_USER_PROPERTY : 保存用户的个人信息
进入讨论组讨论。
josso-gateway-config.xml。
org.josso.gateway.identity.service.store.db.JDBCIdentityStore
SELECT login AS username , password AS password FROM josso_user WHERE login = ?
root
123456
jdbc:mysql://localhost:3306/josso_exam
com.mysql.jdbc.Driver
org.josso.gateway.identity.service.store.db.JDBCIdentityStore
SELECT login FROM josso_user WHERE login = ?
SELECT josso_role.name FROM josso_role , josso_user_role , josso_user
WHERE josso_user.login = ? AND josso_user.login = josso_user_role.login
AND josso_role.name = josso_user_role.name
SELECT ’user.description’ AS name , description AS value
FROM josso_user WHERE login = ?
UNION
SELECT name AS name , value AS value FROM josso_user_property WHERE login = ?
root
123456
jdbc:mysql://localhost:3306/josso_exam
com.mysql.jdbc.Driver
(4)、将MySQL的驱动拷贝到/src/webapp/josso/WEB-INF/lib目录下,供JDBC连接数据库时调用。
(5)、配置Josso的登陆点和注销点,在josso-agent-config.xml中修改,这里我们保持Josso系统默认的登陆和注销设置,同时注意应当把选项的localhost改为主机相对应的IP地址,否则SSO将会失效。
(6)、进入命令行模式,转到Josso的主目录下,执行build.bat war、build.bat install-jboss4和build.bat deploy-jboss4即可。
(7)、修改JBoss server\default\conf目录下的login-config.xml文件,在里面添加Josso的login模型。
flag = "required">
true
(8)、修改JBoss server/default/deploy/jbossweb-tomcat55.sar目录下的server.xml文件,在其中添加选项和选项。
appName="josso"
userClassNames="org.josso.gateway.identity.service.BaseUserImpl"
roleClassNames="org.josso.gateway.identity.service.BaseRoleImpl"
debug="1" />
(9)、启动JBoss。在浏览器中输入http://localhost:8080/partnerapp/protected,如果能转到登陆界面,然后输入用户名(user1)和密码(user1pwd)能够进行登陆,那么Josso和JBoss单点登陆(SSO)的集成就大功告成了
[/quote]