2012-12-11 146 views
2

由於要儘可能保持Web服務無狀態的雄心,我遇到了一個問題。我最近開始與Axis2合作,並試圖找到可行的身份驗證解決方案。通過身份驗證,我的意思是用戶/密碼。我已經將SSL與WS-Policy結合使用來確保程序調用的安全。然而,我發現一些與Rampart 1.6.2捆綁在一起的樣本已經過時,特別是名爲「sample-tomcat」和它們的WSPasswordCallback處理程序(找到了here)的策略示例。 WSPasswordCallback.USERNAME_TOKEN_UNKNOWN在1.6中被棄用,並且WSPasswordCallback.getPassword()總是返回null,即使在消息的安全性標頭中的UsernameToken元素中提供了密碼。Axis2用戶認證

所以。我不確定在哪裏進行每個消息的用戶名/密碼檢查。我正在看這兩個選項:

  1. 用執行用戶名/密碼身份驗證的處理程序編寫模塊。

  2. 放棄無狀態並編寫一個登錄服務返回所有其他服務所需的令牌。

還有其他的選擇嗎?

+0

我不認爲你可以擺脫無國籍狀態,但你可以通過請求中的一些信息進行身份驗證/授權。 –

+0

擺脫無國籍?那麼,我可以實現狀態,這是肯定的。但我希望儘可能少的狀態,最好沒有任何。 – Wrench

回答

1

實際上,根據WSS4J開發商科爾姆ØHeigeartaigh,這是比較奇怪之前變化與驗證接口工作,看到有關WSS4J 1.6新的驗證設計his firsthis secondhis third博客文章。

WSPasswordCallback不應該處理認證,它被認爲是不好的設計和反對關注的分離,因此他們(WSS4J開發人員)重寫了WSS4J的這部分。但是,據我所知,Rampart開發團隊尚未實現開發人員應用自定義驗證程序的方式,也沒有辦法應用WSS4J驗證程序(如NoOpValidator) - 即使它在WSS4J中可用。在他們的(Rampart's)項目JIRA(read it here)中註冊了一個問題,但是它的優先級低,並且正在寫這個問題。該問題未包含在下一個未成年人(1.6.3)或主要(1.7.0)版本中。

所以,你必須做以下三件事的兩種,在我自己的優先順序:

  • 使用傳輸層基礎的認證,我會建議AUTH頭與HTTPS傳輸。
  • 將Axis2和Rampart降級到1.5.x,仍然保留(重大bug修復)。
  • 編輯wss4j的源代碼並編譯一個新的jar。
  • 爲Axis2編寫一個解決此問題的模塊。

如果有其他解決方案/解決方法,請隨時對我進行評論/糾正。