我在嘗試使用Spring Security來保護使用現有的新的Spring MVC應用程序時遇到了一些問題(閱讀:非常有效的「傳統」)單點登錄解決方案。Spring Security with Legacy Single Sign-On
免責聲明:我對Spring相對比較熟悉,但對Spring Security一點也不熟悉;請原諒我的無知。
SSO服務的工作原理是這樣:
- 用戶導航到他們所選擇的網絡應用程序:http://apps.myco.com/webapp123
- 用戶沒有通過驗證,那麼他們將被重定向到http://sso.myco.com/login和提示登錄
- 用戶通過附加到查詢字符串的令牌對其進行身份驗證並導回到應用程序:http://apps.myco.com/webapp123?token=ABCD1234
- 在每個頁面加載(當前的JSP頁面),用戶的令牌從查詢字符串中拉出,然後發送通過SOAP回調到SSO服務來檢查令牌的有效性。 SSO服務爲令牌提供了大拇指或拇指向下的權利(如果令牌有效且仍然是當前的,則以拇指向上;否則,向下傾斜)
- 如果令牌有效,則可以進行另一個SOAP調用以獲得用戶名,如果這是需要
SSO服務不處理授權的用戶憑證,以便對每個應用程序的基礎:(
據我瞭解,普遍接受的被處理這裏的做法是使用Spring Security的預認證框架,但是我(a)不確定在這個假設中我是否正確,並且(b)不確定我需要該解決方案附帶的所有東西。
目前,我已經定義了一個LoginUrlAuthenticationEntryPoint
豆其引導未認證用戶的SSO網站:
<beans:bean id="customAuthenticationEntryPoint" class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:constructor-arg value="http://sso.myco.com/login" />
</beans:bean>
該入口點是有線了,像這樣:
<http use-expressions="true" entry-point-ref="customAuthenticationEntryPoint">
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/edit/**" access="isAuthenticated()" />
<intercept-url pattern="/setup/**" access="hasRole('setup')" />
<intercept-url pattern="/admin/**" access="hasRole('admin')" />
</http>
對我來說,關鍵是在哪裏接收來自SSO服務的「回叫」。我希望有一個URL(例如,http://apps.myco.com/webapp123/auth?token=ABCD1234)接受來自SSO服務的重定向,驗證令牌並從SSO檢索用戶名,然後將所有信息保存在Spring Security上下文中。然而,我錯誤的道路上有一個很好的機會,或者我只是缺少一兩塊。
任何幫助或指導,非常感謝。
你到底與Spring Security有關,它只會處理表單登錄嗎? – dardo
@dardo不,單點登錄系統將處理實際的登錄;我希望Spring Security在用戶的令牌重定向到應用程序時檢查用戶的令牌,然後選擇「ye」或「nay」它們,但我不知道用戶需要指向哪裏才能讓Spring說「嗨,這是一個帶SSO令牌的身份驗證請求「,以便我可以完成所有認證的爵士樂。 (這是否有道理?由於我沒有使用Spring Security工作流程,我可能會寫得很差。) –
發佈可能有幫助的答案,但不涉及彈簧安全 – dardo