我們正在開發一個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上:
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:調試&配置移除,因爲我們解決了這個問題
對於這種「奇怪的事情」的猜測:可能是因爲當您更改聲明規則類型時,已發佈的映射到NameId的聲明被過濾掉,從而停止發佈nameid。 – Thuan
謝謝,這是一個好主意。在調試過程中我會記住這一點。 :) – hlpinform