【问题标题】:Exposing OAuth secured REST service as non secured using WSO2 ESB使用 WSO2 ESB 将 OAuth 安全 REST 服务公开为非安全服务
【发布时间】:2014-11-06 16:14:31
【问题描述】:

我有一个 OAuth 安全的 REST 服务“Oservice”。客户端(想要访问 OService)无法在服务的令牌生成器处请求令牌。我希望 WSO2 ESB 为客户处理这个问题:

1) ESB 应该有一个 API,它接收来自客户端的请求,添加名称 + 密码并将此请求发送到令牌生成器。

2) ESB 应该接收到令牌并将令牌添加到来自客户端的消息中并将其转发给 Oservice。

3) Oservice 从 ESB 接收消息,验证令牌并以正确的内容回复 ESB,ESB 会将回复转发给客户端。

我试图找出 OAuth 调解器是否这样做,但没有成功,因为 OAuth 调解器的文档相当短。 有谁知道如何处理这种情况?

非常感谢!

编辑:

目标是使用 ESB 将安全服务公开为不安全的客户端。我希望这能澄清一点。

【问题讨论】:

    标签: security rest oauth token wso2esb


    【解决方案1】:

    OAuth 中介只能用于验证请求附带的 OAuth 访问令牌。在您的用例中,后端 REST 服务使用 OAuth 进行保护,并且通过 ESB 发出的请求应该具有访问令牌。在这种情况下,OAuth 中介没有用,因为令牌验证发生在后端,而不是 ESB。 This 文章解释了 OAuth 的工作原理。在第 2 步和第 3 步中,您无论如何都需要人工干预来验证资源所有者的身份,而这并非旨在以编程方式完成。因此,您的完整要求似乎无效,因为最终资源是由应用程序访问的,而不是资源所有者。

    但是我认为您的部分要求可以满足。假设您在 ESB 中有两个 REST API API1 和 API2。

    1. 客户端向 API1 发送请求只是为了触发 API。
    2. API1 向 IDP 发送请求,其中包含客户端 ID、授权范围和回调 URL,即 API2 的 URL。
    3. IDP 会将客户端重定向到身份验证页面,他将在该页面进行身份验证。此时客户端的 HTTP 请求已完成。
    4. IDP 会将授权码发送到 API2。
    5. API2 将使用授权码和客户端密钥从 IDP 获取访问令牌。
    6. 一旦收到访问令牌,API2 就可以访问您的 Oservice 并获取响应/资源。
    7. API2 必须将响应存储在文件之类的某个地方。
    8. 客户端可以发出另一个请求说 API3 来检索它。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      在您的情况下,您可以使用 OAuth2 资源所有者凭据授予类型,该类型在使用资源所有者凭据的应用程序高度信任时使用。

      1. 现在您可以将 IDP OAuthService(它是一个 SOAP 服务)公开为 REST,例如 ESB 的 API1。
      2. IDP OAuth 服务将输入作为客户端 ID、客户端密码、资源所有者用户名、资源所有者密码和授权类型 (=password) 并返回具有有效期的访问令牌。
      3. 现在您可以调用 API1 来获取访问令牌,然后在调用其他受 OAuth 保护的 API 时使用该令牌。

      希望对你有帮助。

      【讨论】:

      • 除了我的回答和您上次的编辑之外,这可以通过两种方式在 ESB 轻松实现。通过直接从服务提供商获取访问令牌作为离线(具有较长或未过期的持续时间)并将该令牌放入您的 ESB 突触配置中以用于 API 代理。或者其他方法是硬编码 API 突触中的凭据并按照我的回答中的说明调用 API 1,然后获取访问令牌,然后通过传递令牌调用实际的后端服务。与第一种方法相比,第二种方法总是会从每个服务的令牌提供者那里获得一个新令牌。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多