2012-09-05 82 views
5

我已經使用Apache CXF在Tomcat中部署了webservice。我將如何繼續使用OAuth 2.0來確保該Web服務的安全?如何使用oAuth 2.0來保護apache cxf webservice(jax-ws)

我已經通過下面的URL,但沒有找到任何合適的解決方案。有關如何爲簡單Web服務實現oAuth 2.0的工作示例或教程?

原教程鏈接:

+2

在您編寫JAX-WS(SOAP Web服務)的標題中,但鏈接指向JAX-RS(REST服務),我認爲您並不是找對的地方 – jmhostalet

回答

0

我最近面臨着同樣的問題。經過大量研究後,我發現(這可能僅限於我自己),這很複雜。

有可能所需要的「授權頭」附加到SOAP web服務調用以這種方式:

Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext(); 
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL); 

Map<String, List<String>> headers = new HashMap<String, List<String>>(); 
headers.put("key", Collections.singletonList("yourkey")); 
//... all other parameters required. 
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); 

該請求然後可以在服務器側檢查這樣:

MessageContext mctx = wsctx.getMessageContext(); 

//get detail from request headers 
    Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS); 
    List userList = (List) http_headers.get("key"); 
//... get other information required here 

因此您可以驗證請求。


在一個側面說明

這是要注意的,從我的發現,的oauth2不是簡單地保護您的API是非常有用的 - 只是保護它免受外界使用。

推理

通過OAuth 1,您可以使用通過認證的密鑰來驗證用戶。您知道他們已被授權,因爲他們已成功簽署了該請求,因此您可以允許他們訪問該信息。

使用oAuth 2時,協議要求您使用HTTPS。那麼爲什麼不在你的API中使用應用程序認證呢?我發現oAuth 2對使用原始憑據集(協議目標)訪問第三方應用程序非常有用。但除非你需要這樣做,否則不需要(再次IMO)實施完整的oAuth。如果您只希望保護您的API,只需使用SSL和密鑰或用戶名/密碼組合來完成。


參見:

相關問題