2014-10-31 79 views
2

我正在嘗試使用Apache CXF(版本2.7.12)實現OAuth 2.0的客戶端憑證流以保護REST風格的服務。散列客戶端憑據的客戶端機密在Apache CXF中的OAuth 2流

我唯一的客戶(現在)將被信任保留密鑰和機密 - 我意識到這一點的考慮。

我的問題是我應該如何在授權服務器上存儲客戶端密鑰。在我看來,'客戶祕密'實際上是一個密碼,因此應該被淹沒和散列。但是,CXF的AccessTokenService只對String.equals()進行比較,並且在存儲的祕密和傳入的值之間進行比較,似乎並沒有給出任何提供不同機制的鉤子。

這意味着我將需要以純文本格式存儲客戶機密碼,以便將其與請求中的純文本值進行比較,而不會有一些小問題。

我是否缺少一些明顯的功能,讓我在比較之前對傳入值進行哈希處理,或者我對客戶端密碼過於謹慎?也許我錯了把它當作密碼來對待?

回答

0

對於將來遇到這個問題的人來說,這是一種排序的答案。

我的方法是創建一個非常簡單的過濾器(如此處所述:http://cxf.apache.org/docs/jax-rs-filters.html),手動創建SecurityContext(https://cxf.apache.org/javadoc/latest/org/apache/cxf/security/SecurityContext.html),並在消息通過過濾器時將其添加到消息中。

這意味着,當流程繼續到CXF的AccessTokenService時,它被識別爲已經被認證。

我還在CXF郵件列表上提出了一個問題,並得到了開發人員的一個非常及時的答覆,他同意他最近已經注意到這是一個潛在的問題,並正在研究它。在幾個小時內,他做出了一個改變來解決這個問題,看起來這將是一個理想的解決方案。不幸的是,我還沒有時間去測試它,因爲我的解決方案很有用,並且給了我一些額外的靈活性,這對我的項目的其他需求很有幫助。