我正在使用One Login實施Spring Security SAML。我已經設置了所有的配置文件和元數據。Spring Security SAML One登錄全球單一註銷登出請求解析問題
我能夠獲得登錄工作和註銷工作,如果我從我登錄同一個應用程序註銷。在從SAML IDP這種情況下,我得到LogoutResponse和Spring Security可以解析和處理它。
http://localhost:8080/web/saml/SingleLogout?SAMLResponse= ..............
問題是,當我登錄的兩個應用程序,目前我登錄到一個登錄管理控制檯,還有一個鏈接我的應用程序,我點擊它,我可以直接在我的應用程序登錄,現在當我從One Login管理控制檯註銷時,我的應用程序獲取LogoutRequest。
http://localhost:8080/web/saml/SingleLogout?SAMLRequest= .........
春季安全解析它精緻和傳遞對象驗證檢查邏輯。
org.springframework.security.saml.websso.processLogoutRequest(SAMLMessageContext context, SAMLCredential credential)
該方法有以下檢查。
// Make sure request was authenticated if required, authentication is done as part of the binding processing
if (!context.isInboundSAMLMessageAuthenticated() && context.getLocalExtendedMetadata().isRequireLogoutRequestSigned()) {
throw new SAMLStatusException(StatusCode.REQUEST_DENIED_URI, "LogoutRequest is required to be signed by the entity policy");
}
我試圖跟蹤跟蹤,但上下文對象的字段inboundSAMLMessageAuthenticated從未設置爲true。上述檢查失敗並拋出異常。
在調試模式下,我明確指出值爲真,它繼續前進,但還有一個問題。
在同一個方法中還有另一個檢查。
try {
// Fail if NameId doesn't correspond to the currently logged user
NameID nameID = getNameID(context, logoutRequest);
if (nameID == null || !equalsNameID(credential.getNameID(), nameID)) {
throw new SAMLStatusException(StatusCode.UNKNOWN_PRINCIPAL_URI, "The requested NameID is invalid");
}
} catch (DecryptionException e) {
throw new SAMLStatusException(StatusCode.RESPONDER_URI, "The NameID can't be decrypted", e);
}
該方法equalsNameId如下。
private boolean equalsNameID(NameID a, NameID b) {
boolean equals = !differ(a.getSPProvidedID(), b.getSPProvidedID());
equals = equals && !differ(a.getValue(), b.getValue());
equals = equals && !differ(a.getFormat(), b.getFormat());
equals = equals && !differ(a.getNameQualifier(), b.getNameQualifier());
equals = equals && !differ(a.getSPNameQualifier(), b.getSPNameQualifier());
equals = equals && !differ(a.getSPProvidedID(), b.getSPProvidedID());
return equals;
}
這失敗而有所不同(a.getFormat(),b.getFormat())
問題
我不知道是有什麼我失蹤,有些丟失在哪裏去檢查解決這個問題。
我的單點登出綁定是HTTP重定向。
如果提供了指針,將不勝感激。讓我知道是否需要更多信息。
感謝您的時間。
堆棧(傳統應用程序):
春天3.0。6
春季安全3.1.2
Spring Security的SAML 1.0.0
的Tomcat 7.x的
你有沒有想過這個想法?今天我遇到了同樣的事情,這是我能找到的唯一的問題。 –