亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

JBoss下的單點(diǎn)登陸(SSO)技術(shù)實(shí)現(xiàn)分析

系統(tǒng) 2396 0

本文介紹了單點(diǎn)登陸(SSO, Single Sign On)的實(shí)現(xiàn)原理,詳細(xì)地解釋了單點(diǎn)登陸的實(shí)現(xiàn)原理以及實(shí)現(xiàn)過程中的關(guān)鍵點(diǎn)和相關(guān)選項(xiàng)的含義,并且通過Josso與JBoss 服務(wù)器 的集成,簡要介紹了在JBoss環(huán)境中單點(diǎn)登陸的實(shí)施。

???? 隨著互聯(lián)網(wǎng)的不斷發(fā)展,各種 網(wǎng)絡(luò) 化應(yīng)用服務(wù)的不斷普及,在大中型企業(yè)中,用戶可能每天需要登錄到許多不同的信息應(yīng)用系統(tǒng),如協(xié)同辦公系統(tǒng)、郵件系統(tǒng)、文件關(guān)系系統(tǒng)、各種網(wǎng)絡(luò)化的應(yīng)用服務(wù)等。而每個(gè)系統(tǒng)都要求擁護(hù)遵循它們所定義的一套 安全 策略,比如要求輸入用戶名和密碼。隨著用戶所擁有的服務(wù)的不斷增多,用戶登陸所帶來的出錯(cuò)可能性便會(huì)隨之增加,信息受到非法截獲和破壞的可能性也會(huì)增大,系統(tǒng)的安全性就會(huì)相應(yīng)降低。同時(shí)對于系統(tǒng)管理員來說他除了要管理用戶的用戶名和密碼之外,還需要對不同的用戶進(jìn)行相應(yīng)安全策略的設(shè)置。這樣就勢必造成了系統(tǒng)和安全管理資源的開銷,降低了生產(chǎn)效率,同時(shí)還增加了企業(yè)IT部門的管理成本。為了解決以上的問題,現(xiàn)在很多企業(yè)在進(jìn)行 信息化 實(shí)施的過程中引入了單點(diǎn)登陸,就是先通過一個(gè)應(yīng)用程序的安全驗(yàn)證后,再訪問其他應(yīng)用中的受保護(hù)資源時(shí),不再需要重新登錄驗(yàn)證。當(dāng)然,要求該用戶使用的用戶名和口令在訪問的應(yīng)用中一致,且擁有足夠權(quán)限。下面我們將通過Josso與JBoss的集成的單點(diǎn)登陸(SSO)的實(shí)例,對單點(diǎn)登陸(SSO)的原理及其在JBoss環(huán)境下的技術(shù)實(shí)現(xiàn)進(jìn)行更進(jìn)一步的分析。
?
?? ? 1. 什么是單點(diǎn)登陸(SSO)?
??? 單點(diǎn)登錄(SSO,Single Sign On)是指在分布式環(huán)境下,整個(gè)系統(tǒng)只有一個(gè)可以登錄進(jìn)入的點(diǎn),它對所有的請求(Request)都是通用的。單點(diǎn)登錄可以保證用戶能夠訪問到可以訪問的資源,如果有一個(gè)未被授權(quán)的請求要求訪問被保護(hù)的資源,這個(gè)請求將自動(dòng)被導(dǎo)向到相應(yīng)的驗(yàn)證點(diǎn)進(jìn)行登錄驗(yàn)證。

??? 2. 單點(diǎn)登錄(SSO)的實(shí)現(xiàn)原理
??? (1) 登陸點(diǎn)。理想的情況是用戶通過任何應(yīng)用系統(tǒng)都能進(jìn)行登陸,而且效果一樣。這種單一的登陸點(diǎn)在整個(gè)系統(tǒng)的設(shè)計(jì)中是唯一認(rèn)證用戶的地方,由登陸點(diǎn)將相應(yīng)的用戶信息傳遞給應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)利用這些信息來進(jìn)行用戶的驗(yàn)證。

??? (2) 應(yīng)用系統(tǒng)的單點(diǎn)登錄(SSO)集成。并不是任何系統(tǒng)都能夠使用SSO,只有那些符合SSO規(guī)范,使用SSO API的應(yīng)用系統(tǒng)才具有SSO的功能。簡單地說就是要修改已有的應(yīng)用系統(tǒng),屏蔽已有的應(yīng)用系統(tǒng)的用戶認(rèn)證模塊,使用系統(tǒng)提供的SSO API來驗(yàn)證用戶,以及對用戶的操作進(jìn)行授權(quán)。

??? (3) 統(tǒng)一的認(rèn)證,權(quán)限信息庫。通常SSO要求有統(tǒng)一的認(rèn)證,權(quán)限存放庫。但現(xiàn)實(shí)中,有的系統(tǒng)無法使用外部的認(rèn)證,授權(quán)信息庫,所以就需要在應(yīng)用系統(tǒng)和SSO認(rèn)證系統(tǒng)之間進(jìn)行認(rèn)證,同時(shí)進(jìn)行授權(quán)信息的數(shù)據(jù)同步。
實(shí)現(xiàn)描述:在用戶成功通過SSO認(rèn)證系統(tǒng)認(rèn)證之后,系統(tǒng)提供的映射授予權(quán)限來為用戶登錄到其有權(quán)可以使用的應(yīng)用系統(tǒng)。系統(tǒng)提供的映射取消用戶權(quán)限來實(shí)現(xiàn)用戶的注銷功能。

用戶存取由SSO認(rèn)證系統(tǒng)所提供的 安全 策略,SSO會(huì)話服務(wù)保存了對用戶授權(quán)的證明,這樣就不再需要用戶重新進(jìn)行身份驗(yàn)證。在這種方式下,用戶就擁有了訪問通過SSO應(yīng)用系統(tǒng)集成的應(yīng)用服務(wù)的權(quán)限,我們提供的SSO Session將會(huì)為它保持會(huì)話服務(wù)。(見圖1)


圖1 SSO登陸過程

??? 同時(shí),SSO應(yīng)用系統(tǒng)還包括的與登錄恰恰相反的,統(tǒng)一的注銷點(diǎn),即用戶注銷,就失去了應(yīng)用系統(tǒng)集成的應(yīng)用服務(wù)的訪問權(quán)限。(見圖2)
圖2 SSO注銷過程

?

?

3. Josso與JBoss集成的單點(diǎn)登錄(SSO)環(huán)境的搭建
??? (1)、部署環(huán)境的準(zhǔn)備及配置。
??? 在搭建單點(diǎn)登陸(SSO)開發(fā)環(huán)境之前,需要準(zhǔn)備的開發(fā)工具有:
??? JDK1.5.04 (http://java.sun.com)?
??? JBoss 4.0.4GA (http://www.jboss.org)?
??? josso-1.4.tar (http://www.josso.org)?
??? MySQL 5.0和MySQL的JDBC 驅(qū)動(dòng) mysql-connector-java-3.1.13-bin.jar (http://www.mysql.org)?
??? 需要設(shè)置的環(huán)境有:

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> JAVA_HOME = C:\Program Files\Java\jdk1. 5 .0_09 JBOSS_HOME = D:\JBoss4. 0 .5GA JOSSO_HOME = D:\josso1. 4

??? (2)、定義用戶模型和安全策略。這里我們采用JAAS的用戶模型進(jìn)行數(shù)據(jù)模型的設(shè)計(jì)(如圖3)。


圖3 SSO的用戶模型

??? 同時(shí),向數(shù)據(jù)庫里添加一些數(shù)據(jù)。以上操作的SQL腳本另見附件createdb.sql。
??? (3)、配置Josso的SSO gateway。在src\resources下可以見到j(luò)osso-gateway-config.xml,修改其中的設(shè)置,原文件中有關(guān)于JDBC,DataSource,LDAP等配置的模版,這里我們設(shè)置最簡單的JDBC連接數(shù)據(jù)庫進(jìn)行認(rèn)證,需要修改的有JDBC Credential Store和JDBC Credential Store。詳細(xì)修改的文件見附件

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> JOSSO_USER : 用戶的登陸驗(yàn)證信息 JOSSO_ROLE : 保存所有可定義的用戶角色 JOSSO_USER_ROLE : 保存每個(gè)用戶與角色關(guān)聯(lián)的信息 JOSSO_USER_PROPERTY : 保存用戶的個(gè)人信息


josso-gateway-config.xml。

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <!-- ========================================================= --> <!-- JDBC Credential Store --> <!-- ========================================================= --> < credential - store > < class > org.josso.gateway.identity.service.store.db.JDBCIdentityStore </ class > < credentialsQueryString > SELECT login AS username , password AS password FROM josso_user WHERE login = ? </ credentialsQueryString > < connectionName > root </ connectionName > < connectionPassword > 123456 </ connectionPassword > < connectionURL > jdbc:mysql: // localhost:3306/josso_exam</connectionURL> < driverName > com.mysql.jdbc.Driver </ driverName > </ credential - store > <!-- ========================================================= --> <!-- JDBC Identity Store --> <!-- ========================================================= --> < sso - identity - store > < class > org.josso.gateway.identity.service.store.db.JDBCIdentityStore </ class > < userQueryString > SELECT login FROM josso_user WHERE login = ? </ userQueryString > < rolesQueryString > 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 </ rolesQueryString > < userPropertiesQueryString > 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 = ? </ userPropertiesQueryString > < connectionName > root </ connectionName > < connectionPassword > 123456 </ connectionPassword > < connectionURL > jdbc:mysql: // localhost:3306/josso_exam</connectionURL> < driverName > com.mysql.jdbc.Driver </ driverName > </ sso - identity - store >

??? (4)、將MySQL的 驅(qū)動(dòng) 拷貝到/src/webapp/josso/WEB-INF/lib目錄下,供JDBC連接數(shù)據(jù)庫時(shí)調(diào)用。?
??? (5)、配置Josso的登陸點(diǎn)和注銷點(diǎn),在josso-agent-config.xml中修改,這里我們保持Josso系統(tǒng)默認(rèn)的登陸和注銷設(shè)置,同時(shí)注意應(yīng)當(dāng)把<endpoint>選項(xiàng)的localhost改為主機(jī)相對應(yīng)的IP地址,否則SSO將會(huì)失效。?
??? (6)、進(jìn)入命令行模式,轉(zhuǎn)到Josso的主目錄下,執(zhí)行build.bat war、build.bat install-jboss4和build.bat deploy-jboss4即可。?
??? (7)、修改JBoss server\default\conf目錄下的login-config.xml文件,在里面添加Josso的login模型。

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < application - policy name = " josso " > < authentication > < login - module code = " org.josso.jb4.agent.JBossSSOGatewayLoginModule " flag = " required " > < module - option name = " debug " > true </ module - option > </ login - module > </ authentication > </ application - policy >

??? (8)、修改JBoss server/default/deploy/jbossweb-tomcat55.sar目錄下的server.xml文件,在其中添加<Value>選項(xiàng)和<Realm>選項(xiàng)。

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < Valve className = " org.josso.tc55.agent.SSOAgentValve " debug = " 1 " /> < Realm className = " org.josso.jb4.agent.JBossCatalinaRealm " appName = " josso " userClassNames = " org.josso.gateway.identity.service.BaseUserImpl " roleClassNames = " org.josso.gateway.identity.service.BaseRoleImpl " debug = " 1 " />

??? (9)、啟動(dòng)JBoss。在瀏覽器中輸入 http://localhost:8080/partnerapp/protected ,如果能轉(zhuǎn)到登陸界面,然后輸入用戶名(user1)和密碼(user1pwd)能夠進(jìn)行登陸,那么Josso和JBoss單點(diǎn)登陸(SSO)的集成就大功告成了。

??? 4. Josso與Web應(yīng)用 安全 策略的管理
??? Josso在Web應(yīng)用安全策略的管理主要通過JBoss容器的進(jìn)行用戶權(quán)限的分配和取消。它的整個(gè)應(yīng)用模型主要是基于JAAS的安 全策略模型進(jìn)行拓展,并對Web頁面層和EJB應(yīng)用組件分別進(jìn)行安全控制,下面我們通過Josso自帶的一個(gè)例子來說明。
Web頁面層的安全控制是在web.xml中通過<login-config>、<security-constraint>和<security-role>標(biāo)簽定義來實(shí)現(xiàn)的。
以下是Josso中partnerapp例子對Web頁面層的安全控制實(shí)現(xiàn):

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> < security - constraint > <!-- Sample Security Constraint --> < web - resource - collection > <!-- We ' re going to protect this resource and make it available only to users in "role1". --> < web - resource - name > public - resources </ web - resource - name > < url - pattern >/ resources /**/ /* </url-pattern> <http-method>HEAD</http-method> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> </web-resource-collection> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>protected-resources</web-resource-name> <url-pattern>/josso/*</url-pattern> <url-pattern>/protected/*</url-pattern> <http-method>HEAD</http-method> <http-method>GET</http-method> <http-method>POST</http-method> <http-method>PUT</http-method> <http-method>DELETE</http-method> </web-resource-collection> <auth-constraint> <role-name>role1</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>NONE</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login-redirect.jsp</form-login-page> <form-error-page>/login-redirect.jsp</form-error-page> </form-login-config> </login-config> <security-role > <description>Role 1</description> <role-name>role1</role-name> </security-role>

???? 對于EJB應(yīng)用組件只需在ejb-jar.xml的部署描述符中添加<security-role>中定義相應(yīng)的安全策略,對于JBoss來說同時(shí)還需要在jboss.xml中添加<security-domain>,以保證當(dāng)前域的安全策略生效。在partnerapp中的實(shí)現(xiàn)如下:

    
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <? xml version = " 1.0 " encoding = " ISO-8859-1 " ?> <! DOCTYPE ejb - jar PUBLIC ' -//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN ' ' http://java.sun.com/dtd/ejb-jar_2_0.dtd ' > < ejb - jar > < display - name > Partner Component </ display - name > < enterprise - beans > < session > < ejb - name > PartnerComponentEJB </ ejb - name > < home > org.josso.samples.ejb.PartnerComponentHome </ home > < remote > org.josso.samples.ejb.PartnerComponent </ remote > < ejb - class > org.josso.samples.ejb.PartnerComponentEJB </ ejb - class > < session - type > Stateless </ session - type > < transaction - type > Container </ transaction - type > </ session > </ enterprise - beans > < assembly - descriptor > < security - role > < description > Role 1 </ description > < role - name > role1 </ role - name > </ security - role > < method - permission > < description > Security attributes for ' PartnerComponenttEJB ' methods </ description > < role - name > role1 </ role - name > < method > < ejb - name > PartnerComponentEJB </ ejb - name > < method - name >*</ method - name > </ method > </ method - permission > < container - transaction > < method > < ejb - name > PartnerComponentEJB </ ejb - name > < method - name >*</ method - name > </ method > < trans - attribute > Required </ trans - attribute > </ container - transaction > </ assembly - descriptor > </ ejb - jar > <? xml version = " 1.0 " encoding = " UTF-8 " ?> <! DOCTYPE jboss PUBLIC " -//JBoss//DTD JBOSS 3.0//EN " " http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd " > < jboss > < security - domain > java: / jaas / josso </ security - domain > < enterprise - beans > < session > < ejb - name > PartnerComponentEJB </ ejb - name > < jndi - name > josso / samples / PartnerComponentEJB </ jndi - name > </ session > </ enterprise - beans > </ jboss >

??? 以上是Josso對Web應(yīng)用層和EJB組件所關(guān)聯(lián)的安全策略的部署描述,另外在Josso驗(yàn)證的驗(yàn)證過程中,登陸頁面、注銷頁面和通過驗(yàn)證后用戶的信息都是通過JBoss 服務(wù)器 支持的單點(diǎn)登陸模式來實(shí)現(xiàn)的。JBoss 服務(wù)器 支持的登錄驗(yàn)證機(jī)制主要有:基于HTTP的基本驗(yàn)證(采用簡單的Base64編碼),基于HTTPS的客戶端驗(yàn)證(采用證書驗(yàn)證),基于表單驗(yàn)證(通過表單提交的信息,自己定制驗(yàn)證方式)等;而通過驗(yàn)證后的用戶信息可以通過Servlet的request對象的getUserPrincipal()方法來獲得。在這里我們就不多做介紹。相關(guān)的信息可以查閱JBoss及Servlet的文檔。?

??? 5. 小結(jié)
?
??? 單點(diǎn)登陸(SSO)是一個(gè)很大的議題,在本文中筆者只是簡單地通過對單點(diǎn)登陸(SSO)的實(shí)現(xiàn)原理和Josso在JBoss環(huán)境下的實(shí)施的介紹,讓讀者在一個(gè)側(cè)面對單點(diǎn)登陸(SSO)有一定認(rèn)識(shí)。

JBoss下的單點(diǎn)登陸(SSO)技術(shù)實(shí)現(xiàn)分析


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产人成精品免费视频 | 国产精品久久久久久久人热 | 老司机午夜在线视频 | 欧美成人一区二区三区 | 久久精品系列 | 午夜亚洲精品久久久久久 | 久久久久久久久综合影视网 | 久久久精品2021免费观看 | 天天插天天插天天插 | 国产自产视频 | 四虎影视最新2019百度 | 亚洲精品久久九九热 | 久久美女免费视频 | 国产在线98福利播放视频免费 | 国产综合在线播放 | 国产成人精品一区二三区在线观看 | 色站综合 | 国产在线视频不卡 | 西西大胆实体啪啪色哟哟 | 一级国产精品一级国产精品片 | 青青青国产免费线在 | 全部免费毛片 | 99国产福利视频在线观看 | se94se亚洲欧美在线 | 免费的黄色网 | 一级色视频 | 欧美日韩视频在线第一区 | 91高清在线成人免费观看 | 一级毛片在线免费播放 | 国产精品国产福利国产秒拍 | 欧美性狂猛bbbbxxxx | 亚洲 国产 日韩 欧美 | 国产一级毛片国产 | porno xxxx日本| 久久精品国产波多野结衣 | 九九九九精品视频在线播放 | 色综合图区 | 国产成人高清亚洲一区久久 | 一级特黄aaa大片29 | 快播视频在线 | 亚洲一区二区免费在线观看 |