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

标签 web-services apache oauth-2.0 cxf

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

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

原教程链接:

  • JAX-RS: OAuth2
  • 最佳答案

    我最近遇到了同样的问题。经过大量研究后,我发现(这可能仅限于我一个人)这非常复杂。
    可以通过以下方式将所需的“授权 header ”附加到 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,您可以使用身份验证通过用户的 key 来验证用户。您知道他们已获得授权,因为他们已成功签署请求,因此您将允许他们访问信息。
    对于 oAuth 2,该协议(protocol)要求您使用 HTTPS。那么为什么不将应用程序身份验证与您的 API 一起使用呢?我发现 oAuth 2 对于使用原始凭据集(协议(protocol)的目标)访问 3rd 方应用程序非常有用。但除非您需要这样做,否则无需(再次 IMO)实现完整的 oAuth。如果您只希望保护您的 API,只需使用 SSL 和 key 或用户名/密码组合即可。

    也可以看看:
  • Application Authentication With JAX-WS
  • CFX User Guide
  • How is OAuth 2 different from OAuth 1?
  • Designing a Secure REST API without oAuth - 对一般理解更有用。
  • 关于web-services - 如何使用 oAuth 2.0 保护 apache cxf webservice(jax-ws),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12281770/

    相关文章:

    java - Web服务应用程序如何知道soap调用特定方法,而无需在soap消息中使用操作名称?

    node.js - 如何在公共(public)网络服务器上为 Node 应用程序安装 Node 模块?

    java - 生成 WebService 工件时遇到问题

    java - 如何解决 makeHttpRequest 方法错误?

    java - 无法 Autowiring ,存在不止一个 b​​ean 错误

    asp.net - 导入 Web 服务时出现问题

    php - 将特定文件夹发送到 HTTPS,并将其余文件夹从非 www 发送到 www,同时保持 Laravel 路由的其余部分正常工作?

    apache - 在 apache 上安装 p7b

    node.js - 由于同意屏幕,无法创建 Google oAuth 客户端 ID

    azure - 如何跨事件目录添加权限? (在azure中设置 Multi-Tenancy 应用程序时出现问题)