九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
WebLogic平臺(tái)的Web SSO(SAML)解決方案
SSO(Single Sign-On)即所謂的單點(diǎn)登錄。用戶在一處登錄后訪問(wèn)其他網(wǎng)站時(shí)不需要再次輸入用戶名和口令,即可完成身份驗(yàn)證。

  文章《體驗(yàn)WebLogic Server 8.1 SP4新增功能之WebLogic Single Sign-On》(http://dev2dev.bea.com.cn/techdoc/200507499.html)中介紹了使用WLS8.1 SP4版本中的Single Pass Negotiate Identity Assertion Provider完成與Windows平臺(tái)的SSO。但有更多的人可能希望在不借助,或者不與Windows集成的情況下完成Single Sign-On。Kerberos當(dāng)然可以是其中的一種解決辦法,但是目前互聯(lián)網(wǎng)上應(yīng)用更多的是SAML,一個(gè)用于在網(wǎng)絡(luò)實(shí)體間交換安全認(rèn)證信息的基于XML的框架。

  本文據(jù)此提出一種適用(針對(duì))于WebLogic Server的,簡(jiǎn)單、可行的SSO解決方案。這個(gè)方案以集中統(tǒng)一的用戶信息為基礎(chǔ),但不包括通常理解的權(quán)限管理,而僅僅提供一個(gè)身份驗(yàn)證的服務(wù)。因?yàn)橐话闱闆r下,一個(gè)企業(yè)內(nèi)部的多個(gè)成熟系統(tǒng)通常分別有自己的已經(jīng)比較完善的用戶身份驗(yàn)證和權(quán)限管理功能。在這種情況下,為整合多個(gè)業(yè)務(wù)系統(tǒng)而提供包括權(quán)限管理在內(nèi)的多種安全服務(wù),常常將問(wèn)題復(fù)雜化(盡管SAML可以做到這一點(diǎn))。

  因此本文提出的方案將只解決用戶的身份驗(yàn)證,即實(shí)現(xiàn)SSO的本義。在SSO幫助用戶完成身份驗(yàn)證后,由各個(gè)業(yè)務(wù)系統(tǒng)本身的權(quán)限管理進(jìn)行用戶行為的進(jìn)一步控制。這樣不僅完成了用戶賬號(hào)的集中管理(SAML可以完成不同系統(tǒng)間不同賬號(hào)的federated但不在本文討論范圍內(nèi)),又不失原有系統(tǒng)靈活的權(quán)限控制。而且方案簡(jiǎn)單可行,不需要對(duì)原有應(yīng)用做較大更改,適合快速解決Single Sign-On問(wèn)題。

  如果有更復(fù)雜的需求,完全可以在本文的基礎(chǔ)上,參考Shibboleth(http://shibboleth.internet2.edu/)項(xiàng)目以及SourceID(http://www.sourceid.org/index.html)的項(xiàng)目進(jìn)行深入的研究和了解,以找出最適合自己的解決方案。

名詞

SAML

  本文將以SAML 1.1實(shí)現(xiàn)SSO。SAML定義了一個(gè)用于在線商業(yè)系統(tǒng)間交換安全信息的基于XML的框架,它由OASIS (the Organization for the Advancement of Structured Information Standards)組織的Security Services Technical Committee (SSTC)開發(fā)。詳情參考文章后面的參考資料部分。

OpenSAML

  一個(gè)開源的SAML1.1實(shí)現(xiàn),本文使用opensaml1.1完成與SAML相關(guān)的邏輯處理。OpenSAML是Shibboleth項(xiàng)目的一部分。Shibboleth是一個(gè)針對(duì)SSO的開源項(xiàng)目。

WebLogic Server

  業(yè)界領(lǐng)先的J2EE應(yīng)用服務(wù)器。本文的方案以WebLogic Server 8.1SP4為基礎(chǔ)。本文附帶的Demo應(yīng)用只能跑在WLS8.1 SP4上,如果8.1SP3等版本需要適當(dāng)改動(dòng)。

Identity Assertion Provider

  Identity Assertion Provider是WebLogic 7以后提供的眾多Provider的一種,它其實(shí)就是一個(gè)Authentication Provider,只不過(guò)它不需要口令來(lái)完成用戶的身份驗(yàn)證;如果在其他平臺(tái)比如Tomcat上實(shí)現(xiàn),也可以是一個(gè)普通的LoginModule,只需要通過(guò)CallbackHandler獲取Token然后驗(yàn)證就可以了。

  本文附帶一個(gè)示例的Identity Assertion Provider。

Java KeyStore

  本文將附帶一個(gè)自簽名的java key store,它由JDK帶的Keytool生成并簽名。

Service Provide

  服務(wù)提供者。就是我們一般理解的業(yè)務(wù)系統(tǒng),它通過(guò)配置在其上的Identity Assertion Provider完成對(duì)用戶提交Token的校驗(yàn),一般又稱為SAML Assertion Consumer。文章后面簡(jiǎn)稱為SP。

Identity Provider

  身份認(rèn)證提供者。通過(guò)它對(duì)用戶進(jìn)行身份驗(yàn)證,以及生成SAML Assertion Token,又稱為SAML Assertion Productor。本方案的實(shí)現(xiàn)中核心為一個(gè)Servlet。文章后面簡(jiǎn)稱為IDP。

Use Case

  本文描述的方案實(shí)現(xiàn)了SAML 1.1 提供的POST Profile User Case,并有適當(dāng)修改。

  • 用戶打開瀏覽器訪問(wèn)Service Provider 網(wǎng)站,訪問(wèn)受SAML Auth Filter保護(hù)的頁(yè)面
  • SP網(wǎng)站的SAML Auth Filter 檢查到用戶沒(méi)有登錄,那么將用戶請(qǐng)求的頁(yè)面地址(TARGET)附加在IDP的URI之后,并將用戶的瀏覽器重定向到IDP網(wǎng)站
  • 否則SP網(wǎng)站接受用戶請(qǐng)求
  • IDP網(wǎng)站接受到用戶請(qǐng)求,判斷用戶是否已經(jīng)登錄
  • 如果用戶已經(jīng)在IDP登錄,那么到10
  • 如果用戶沒(méi)有在IDP登錄,那么向用戶響應(yīng)登錄表單
  • 用戶通過(guò)IDP傳回的登錄表單,輸入用戶名和口令并提交登錄請(qǐng)求
  • IDP接受到用戶登錄請(qǐng)求,使用用戶提交的用戶名和口令進(jìn)行身份驗(yàn)證
  • 如果驗(yàn)證失敗,向用戶響應(yīng)登錄失敗頁(yè)面
  • 如果登錄成功,并且提交的Query String中指定了TARGET,那么會(huì)向用戶響應(yīng)一個(gè)自動(dòng)提交表單,將SAML Assertion Token提交到TARGET指定的URL
  • SP網(wǎng)站接受到用戶提交的SAML Assertion Token,并將Token傳遞給Identity Assertion Provider
  • Identity Assertion Provider校驗(yàn)Token是否合法,并從中讀取用戶信息
  • 如果Token通過(guò)驗(yàn)證,Identity Assertion Provider返回經(jīng)過(guò)驗(yàn)證的Subject,否則拋出驗(yàn)證異常
  • SP獲取到Identity Assertion Provider返回的Subject,表示用戶登錄成功,返回用戶請(qǐng)求的頁(yè)面
  • 否則SP獲取到Identity Assertion Provider拋出的LoginException,向用戶響應(yīng)登錄失敗頁(yè)面,用戶登錄失敗

技術(shù)實(shí)現(xiàn)

  這里描述一下前面Use Case中涉及的幾個(gè)技術(shù)方面。

  • 從安全角度考慮,用戶到IDP和SP間的連接必須通過(guò)HTTPS,尤其是在外網(wǎng)Internet;對(duì)于內(nèi)部網(wǎng)絡(luò)Intranet應(yīng)用可以通過(guò)其他辦法強(qiáng)化網(wǎng)絡(luò)安全
  • 使用SAML Auth Filter控制哪些頁(yè)面加入SSO

<filter-mapping>

<filter-name>SAMLAuthFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

  這里表示SP全部的頁(yè)面受SAMLAuthFilter保護(hù)。

  • IDP根據(jù)用戶提交的賬號(hào)和口令進(jìn)行身份驗(yàn)證

  我們使用 WebLogic提供的 API進(jìn)行用戶身份驗(yàn)證,這樣才能完成一個(gè)讓 WebLogic Server認(rèn)為是合法的登錄。這個(gè)weblogic.servlet.security.ServletAuthentication提供的方法具體實(shí)現(xiàn)在不同的SP版本中總有變化,比如WLS8.1 SP3和8.1 SP4,因此需要留意這一點(diǎn)。本文方案的實(shí)現(xiàn),以WELS8.1SP4為準(zhǔn)。

public static int login(java.lang.String username,

java.lang.String password,

javax.servlet.http.HttpServletRequest request)

throws javax.security.auth.login.LoginException

Returns an int value for AUTHENTICATED or FAILED_AUTHENTICATION after using the username and password to authenticate the user and setting that user information into the session. This method is similar to "weak", except that the LoginException is propogated to caller.

Parameters:

username - String

password - String

request - HttpServletRequest

Returns:

int authentication value

Throws:

javax.security.auth.login.LoginException -

  • IDP根據(jù)用戶信息生成相應(yīng)的SAML Assertion Token

這里的代碼來(lái)自于opensaml提供的POSTProfileTest.java,用于生成 SAMLResponse并進(jìn)行簽名

SAMLResponse r = SAMLPOSTProfile.prepare(

"www.opensaml.org",

"www.opensaml.org",

Collections.singleton("http://www.opensaml.org"),

"foo",

"foo",

null,

"127.0.0.1",

"foo",

new Date(),

Collections.singleton(

new SAMLAuthorityBinding(SAMLBinding.SAML_SOAP_HTTPS,

"http://www.opensaml.org",

new QName(XML.SAMLP_NS,"AttributeQuery")

)

)

);

assertNotNull("No SAMLResponse was generated.",r);

Iterator i = r.getAssertions();

((SAMLAssertion)i.next()).sign(

XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1,

ks.getKey(alias,password),

Arrays.asList(ks.getCertificateChain(alias))

);

r.sign(

XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1,

ks.getKey(alias,password),

Arrays.asList(ks.getCertificateChain(alias))

);

  • Identity Assertion Provider校驗(yàn)IDP生成的Token

  具體Identity Assertion Provider的實(shí)現(xiàn)超出了本文討論的篇幅。這里只描述其需要實(shí)現(xiàn)的主要邏輯,同樣來(lái)自于POSTProfileTest.java

assertTrue("SAMLResponse is not signed.",r.isSigned());

System.err.println("================ Generated Response ===============");

r.toStream(System.err);

System.err.println();

r.verify(ks.getCertificate(alias));

SAMLResponse r2 = SAMLPOSTProfile.accept(r.toBase64(), "www.opensaml.org", 60, true);

assertTrue("SAMLResponse is not signed.",r2.isSigned());

SAMLPOSTProfile.getSSOAssertion(r2,Collections.singleton("http://www.opensaml.org")).verify(ks.getCertificate(alias));

r2.verify(ks.getCertificate(alias));

System.err.println("================ Verified Response ===============");

r2.toStream(System.err);

System.err.println();

 

  只要將上面的邏輯放入在Identity Assertion Provider中就可以了。

  • 自動(dòng)提交表單

  在IDP響應(yīng)給用戶的頁(yè)面包含了一個(gè)自動(dòng)提交的表單,將SAML Assertion Token通過(guò)HTTP POST提交給用戶請(qǐng)求的SP頁(yè)面。這部分由SAML1.1中的Browser/POST Profile定義。由于生成的SAML Assertion往往比較大,不能通過(guò)HTTP GET提交,因此通過(guò)自動(dòng)提交表單完成。這樣用戶仍然可能會(huì)感受到短暫的跳轉(zhuǎn),如果使用Browser/Artifact Profile,那么將由SP和IDP進(jìn)行溝通,用戶感受會(huì)好一點(diǎn),但是開發(fā),部署均麻煩一些,SP和IDP需要雙向SSL,并且opensaml沒(méi)有提供這個(gè)實(shí)現(xiàn),這里就不深入討論了。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

<html>

<head>

<title>Auto Submit</title>

</head>

<body onLoad="document.myform.submit()">

<form name="myform" action="">

</form>

</body>

</html>

  綜上,大家看是不是很簡(jiǎn)單呢?J

Demo的部署和演示

  這里介紹附帶的幾個(gè)文件

sp.war

  Service Provider應(yīng)用,可以直接部署在WebLogic Server上。

idp.war

  Identity Provider應(yīng)用??梢灾苯硬渴鹪赪ebLogic Server上。其中主要就是一個(gè)LogonServlet

samlIdentityProvider.jar

  這里提供的SAML Identity Assertion Provider只是為了演示使用,如果需要應(yīng)用在具體的生產(chǎn)環(huán)境中,則需要詳盡的測(cè)試,調(diào)優(yōu),以及適當(dāng)?shù)男薷摹?/p>

opensaml.jar

  運(yùn)行OpenSAML需要的jar包,同時(shí)它使用了很多第三方的類庫(kù),因此這些第三方的jar包也需要,由于文件太大,不在附件中,大家可以去www.opensaml.org下載最新版本。

xbean.jar

  包含在WLS8 /server/lib目錄下,需要在啟動(dòng)WLS的腳本中加入到classpath中

endorsed

  OpenSAML要求使用的XML Parser,在附件中

idp.jks

  使用keytool生成的KeyStore,存放了一對(duì)密鑰

idp.cer

  密鑰對(duì)中的公鑰,SP使用它校驗(yàn)Token是否有效

  下面介紹Demo的部署過(guò)程。

  • 解開附件的壓縮包,將opensaml.jar以及其使用到的第三方j(luò)ar包和xbean.jar放在適當(dāng)?shù)胤?;將endorsed目錄放在適當(dāng)?shù)胤?,將?步驟中使用
  • 修改啟動(dòng)WebLogic的腳本,在CLASSPATH中增加指向opensaml.jar以及其第三方j(luò)ar和xbean.jar(WebLogic8中也帶有該jar)的路徑,并設(shè)置系統(tǒng)變量-Djava.endorsed.dirs=<endorsed目錄>
  • 為驗(yàn)證SSO需要將sp.war和idp.war分別部署在兩臺(tái)WebLogic Server上。修改idp.war/WEB-INF/web.xml中在path參數(shù)中指明idp.jks的文件路徑,以及訪問(wèn)keystore的口令123456(這里keystore口令和alias的主口令設(shè)置為一致,否則此處需要多設(shè)置一個(gè)配置項(xiàng));修改sp.war/WEB-INF/web.xml,在redirectURL參數(shù)配置IDP網(wǎng)站的地址,指向SAMLLogon 這個(gè)Servlet在IDP上映射的URL。
  • 在SP上配置SAML Identity Assertion Provider(IDP所在的WLS不需要配置)
    • 將samlSecurityProvider.jar拷貝至 /server/lib/mbeantypes下。如果有Managed Server并且Managed Server在另外一臺(tái)物理機(jī)器上或另外一個(gè)獨(dú)立的WL安裝目錄下,那么同樣需要將samlSecurityProvider.jar拷貝至對(duì)應(yīng)的mbeantypes目錄下
    • 重新啟動(dòng)全部的Server
    • 通過(guò)WebLogic Console配置SAML Identity Assertion Provider,在Detail中指明idp.cer證書的路徑,別名,以及口令。需要注意一點(diǎn)就是,需要將Base64的選擇取消
    • 重新啟動(dòng)全部的WebLogic Server
  • 在SP和IDP兩個(gè)系統(tǒng)的WebLogic Server Realm中增加一個(gè)測(cè)試用戶,為sso_user并設(shè)置口令,如果SP和IDP部署在同一個(gè)WLS Domain,那在WLS Admin Console上做一次就可以了;如果有統(tǒng)一的用戶存儲(chǔ),那么部署對(duì)應(yīng)的Authentication Provider就可以了

  至此,部署成功。

下面是演示過(guò)程:

演示一:

  • 訪問(wèn)SP網(wǎng)站的受保護(hù)頁(yè)面http://localhost:19001/sp/index.jsp
  • 瀏覽器被重定向到IDP網(wǎng)站被要求登錄

  • 輸入用戶sso_user以及用戶口令登錄
  • 登錄成功后瀏覽器返回 http://localhost:19001/sp/index.jsp頁(yè)面內(nèi)容

演示二:

  • 訪問(wèn)IDP網(wǎng)站的登錄頁(yè)面 http://localhost:18000/logon
  • 在登錄表單中輸入用戶名sso_user和口令

  • 登錄成功后,顯示IDP歡迎頁(yè)面以及用戶登錄成功的賬號(hào)

  • 手工在瀏覽器中輸入地址 http://localhost:19001/sp/index.jsp
  • 瀏覽器顯示SP頁(yè)面內(nèi)容而不需要再登錄

 

演示三(圖片省略):

  如果IDP網(wǎng)站當(dāng)機(jī),那么只是喪失SSO而已,不會(huì)影響業(yè)務(wù)系統(tǒng)的使用,這一點(diǎn)對(duì)大的應(yīng)用來(lái)說(shuō)很重要。

  • 訪問(wèn)SP的登錄頁(yè)面 http://localhost:19001/sp/logon.jsp
  • 在登錄表單中輸入用戶名sso_user和口令,進(jìn)行登錄
  • 登錄成功后,歡迎頁(yè)面顯示用戶的賬號(hào)信息

參考資料

  • http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=securityOASIS關(guān)于SAML的站點(diǎn)
  • http://www.opensaml.orgOpenSAML的網(wǎng)站,它是一個(gè)叫Shibboleth項(xiàng)目的一部分。Shibboleth項(xiàng)目主要應(yīng)用在校園內(nèi),以及校園間的應(yīng)用系統(tǒng)的用戶身份聯(lián)合認(rèn)證。也有不少商業(yè)和政府網(wǎng)站采用
  • http://www.sourceid.org/index.htmlSourceID是非常有實(shí)力的一個(gè)開源組織,旗下有多個(gè)開源項(xiàng)目(SAML、Liberty Alliance,WS-Federation)。SSO是其主要目的之一,當(dāng)然不僅限于此,更著重于用戶身份的聯(lián)合,以及安全信息的共享。比如用戶在網(wǎng)站1的賬號(hào)是User1,在網(wǎng)站2的賬號(hào)是User 2,那么如何實(shí)現(xiàn)SSO呢?
  • http://e-docs.bea.com/wls/docs81/security/index.html更多關(guān)于開發(fā)WebLogic Security Provider的信息
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
SAP Success Factor Single Sign On(單點(diǎn)集成) 的文檔清單
[原創(chuàng)] SSO(Single Sign-on) in Action(上篇)
CSDN編程社區(qū)SAML安全斷言標(biāo)記語(yǔ)言
SAML簡(jiǎn)介:安全地共享數(shù)字身份信息_SAML簡(jiǎn)介:安全地共享數(shù)字身份信息_Web服務(wù)技巧...
Java-Weblogic 12c上的Spring SAML
體驗(yàn)WebLogic Server 8.1 SP4新增功能之WebLogic Single...
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服