2016-09-28 119 views
3

我們正在開發一個Web應用程序,它提供多種登錄機制,如LDAP,Kerberos,SAP登錄票證以及SAML。SAML SP與ADFS之間的SSO問題IdP

爲此,我們使用Spring Security Framework,其工作(大部分)非常棒!

幾個月前,我們嚮應用程序添加了SAML支持,並使用外部IdP(SSOcircle)對其進行了測試。我們還與SSOcircle的首席執行官密切合作,讓我們開展並運行。

一切正常,我們認爲我們可以將SAML加入我們的第一位真實客戶。因此,我們在linux機器上設置了一個測試服務器(SP),並配置了我們的部分(我們使用此文檔:http://docs.spring.io/spring-security-saml/docs/current/reference/html/chapter-idp-guide.html),並等待我們的客戶盡其全力。

但是,當他們試圖將SSO加入我們的應用程序(他們使用ADFS)時,我們遇到了一個問題。

因爲現在,我們得到兩條錯誤消息中的一條。無論是這一個

驗證請求失敗: org.springframework.security.core.userdetails.UsernameNotFoundException:不允許 空的用戶名!

或這一個

錯誤驗證SAML消息org.opensaml.common.SAMLException: NameID元素必須存在作爲響應 消息主題的一部分,請啓用它在IDP配置

在故障排除我碰到這些其他線程在這裏StackOverflow上:

SAMLException: NameID element must be present as part of the Subject in the Response message, please enable it in the IDP configuration

Configuring ADFS 3.0/SAML 2.0 to work with Spring Security for SSO integration

NameID element must be present as part of the Subject

奇怪的是,所述第二錯誤消息(關於填充NameID)元件出現只有當我們改變從「傳出聲明類型」到「ADFS權利要求規則通過索賠類型「。

現在,我不知道繼續排除故障的位置。關於這個問題的任何想法或想法?

問候 勒

EDIT1:我attatched鏈接到調試日誌文件,然後我們的SAML安全配置

EDIT2:是否有人知道是否有指定哪些SAML應該使用一個時區的方法嗎?現在,祖魯時間似乎是使用的時區,儘管我們的操作系統配置爲使用CET/CEST。因此,我們必須使用responseSkew參數進行登錄/註銷。

EDIT3:調試&配置移除,因爲我們解決了這個問題

+0

對於這種「奇怪的事情」的猜測:可能是因爲當您更改聲明規則類型時,已發佈的映射到NameId的聲明被過濾掉,從而停止發佈nameid。 – Thuan

+0

謝謝,這是一個好主意。在調試過程中我會記住這一點。 :) – hlpinform

回答

2

好了,我們解決了這個問題。

期間,我們注意到,在填充NameID不發送作爲SAML斷言屬性鍵/值對,但作爲SAML斷言「頭」一「獨立」鍵/值對現場調試。

所以我們修改了我們的代碼來覆蓋SAML斷言中的兩個可能的位置,現在它工作得很好。 :D