如何使用oAuth 2.0保护apache cxf webservice(jax-ws)

use*_*115 5 apache web-services cxf oauth-2.0

我已经在Tomcat中部署了webservice Apache CXF.我将如何使用保护该Web服务OAuth 2.0

我已经浏览了以下网址,但没有找到任何合适的解决方案.关于如何实现oAuth 2.0简单Web服务的工作示例或教程?

原始教程链接:

blo*_*p3r 1

我最近遇到了同样的问题。经过大量研究后,我发现(这可能仅限于我一个人)这是相当复杂的。

可以通过以下方式将所需的“授权标头”附加到 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);
Run Code Online (Sandbox Code Playgroud)

然后可以在服务器端检查请求,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

因此您可以验证该请求。


附注

值得注意的是,根据我的发现,oAuth2 对于简单地保护您的 API 不是很有用 - 只是保护它不被外部使用。

推理

使用 oAuth 1,您可以使用身份验证通过密钥来验证用户。您知道他们已获得授权,因为他们已成功签署了请求,因此您将允许他们访问该信息。

对于 oAuth 2,协议要求您使用 HTTPS。那么为什么不直接在 API 中使用应用程序身份验证呢?我发现 oAuth 2 对于使用原始凭据集(该协议的目标)访问第三方应用程序非常有用。但除非您需要这样做,否则没有必要(在我看来)实现完整的 oAuth。如果您只想保护 API,只需使用 SSL 和密钥或用户名/密码组合即可。


也可以看看: