我已經使用Apache CXF
在Tomcat中部署了webservice。我將如何繼續使用OAuth 2.0
來確保該Web服務的安全?如何使用oAuth 2.0來保護apache cxf webservice(jax-ws)
我已經通過下面的URL,但沒有找到任何合適的解決方案。有關如何爲簡單Web服務實現oAuth 2.0
的工作示例或教程?
原教程鏈接:
我已經使用Apache CXF
在Tomcat中部署了webservice。我將如何繼續使用OAuth 2.0
來確保該Web服務的安全?如何使用oAuth 2.0來保護apache cxf webservice(jax-ws)
我已經通過下面的URL,但沒有找到任何合適的解決方案。有關如何爲簡單Web服務實現oAuth 2.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和密鑰或用戶名/密碼組合來完成。
我添加了一個簡短的介紹在這裏: https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+OAuth2#JAX-RSOAuth2-OAuth2tokensandSOAPendpoints
基本上,它會通過授權頭傳遞的就是承載令牌工作,並且可以很容易地定製,以處理WS-Security的二進制令牌
在您編寫JAX-WS(SOAP Web服務)的標題中,但鏈接指向JAX-RS(REST服務),我認爲您並不是找對的地方 – jmhostalet