簡體   English   中英

如何通過有效的SAML 2.0斷言登錄?

[英]How to login throught a valid SAML 2.0 assertion?

我正在開發一個Android項目,該項目必須與SSO Shibboleth身份驗證受保護的網站進行強烈交互。 因此,我必須創建一個Java類,以便進行有效的SAML聲明並登錄到網站。

我在Google上搜索了很多,然后發現了這段代碼: http : //blog.keksrolle.de/2010/07/27/how-to-create-a-valid-saml-2-0-assertion-with-opensaml -for-java.html實際上,我發現不需要它,因為我能夠通過一些HttpConnection請求獲得SAML響應。

我編寫的代碼能夠執行此列表的步驟1-5: http : //en.wikipedia.org/wiki/Security_Assertion_Markup_Language#The_SAML_Use_Case最后要做的就是獲取SAMLResponse參數的值,該值是base64編碼元素 然后,它向斷言使用者服務發出POST請求。 這里的偽代碼

/* discover the IdP */
connect to the link (/idp/login/) which redirects to the form page (/Authn/UserPassword)
get cookies from the link in order to gain access to the form page
/* end */
/* get SAML response climbing the redirects */
set goTo var to the link of the form page
do {
    send POST data (+ cookies) to the goTo page
    get cookies of the new page and saves them with the others
    set goTo to connection.getHeaderField("Location");
} while (!(responseCode==200));
read the source of the last redirect 
get the specific SAMLResponse
/* end */
send it to website.com/Shibboleth.sso/SAML2/POST
get cookies, session data

但是之后,服務器的響應是500錯誤代碼或頁面錯誤代碼(“發生錯誤。重試。”)。 實際上,即使我有一個有效的SAML斷言(已發送(編碼)到服務器),也無法訪問該會話。 這是會議的問題嗎? 發出POST請求后,我以為服務器通過cookie(JSESSIONID)和查詢字符串(/home.do;jsessionid=XXXFAEC60AXXX7A7B9XXXAA9EXXXE71X.jvm2c)協調了我,但我認為可能有些地方完全錯了。

如何通過Java登錄經過SAML身份驗證的網站?

另一個(邊際)問題:我執行了所有請求而未加密(https)。 從安全角度(數據包嗅探等)來看,這可能是一個問題嗎?

不幸的是,我無法想象您的確切問題是什么。 我只能將您重定向到Shibboleth網頁 ,它可以在shibboleth工作流程方面給您帶來啟發。 也有SAML配置文件的文檔 (第14頁WB-SSO)。 我發現在使用Single Logout Profile擴展我的應用程序期間它很有幫助

至於缺少https ...這是一個重大的安全漏洞。 完全使用Shibbolethh或WBSSO的目的是為資源和可靠的用戶信息提供最大的保護。 首先,您需要與IdP進行安全的登錄憑據交換。 其次,如果有人嗅到簽名(甚至加密)的斷言(idp發送回您的應用程序),則他可能無法從中獲取用戶信息(由於加密),但是只要斷言,他就可以訪問您的安全服務有效(5分鍾,15分鍾甚至幾個小時-取決於IdP配置)

編輯1:作為示例代碼,請 (在Java中的Shibboleth實現),也許你會幫助你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM