2

在运营商中实施 OAuth2 授权的最佳方式是什么?我们已经使用 PEP 代理保护了我们的后端 API,我们需要一个有效的令牌。用户登录后,wirecloud 是否提供任何访问它的方法。例如:

MashupPlatform.context.getOAuthToken()

我们尽量避免在操作员的逻辑中硬编码用户凭据。

4

1 回答 1

1

是的,

尽管您无法从小部件/操作员读取 OAuth2 令牌,但您可以使用 WireCloud 的代理并将其配置为将 OAuth2 令牌注入您的请求中。为此,您必须在发出请求时提供以下标头:

  • X-FI-WARE-OAuth-Token值应该是true
  • X-FI-WARE-OAuth-Header-Name是要使用 OAuth2 令牌添加到请求中的标头的名称,在您的情况下:X-Auth-Token当您使用 PEP 代理时(尽管 OAuth2 的正确标头是Authorization)。

考虑到匿名用户没有有效的 OAuth2 令牌。此外,如果您正在运行 WireCloud 的自定义实例,则可以将其配置为支持多个身份验证后端。在这种情况下,某些用户不会与 IdM 帐户相关联。您可以通过运行以下代码检查当前登录的用户是否具有关联的 IdM 令牌:MashupPlatform.context.get('fiware_token_available');

还有实验性支持使用仪表板所有者的 OAuth2 令牌,而不是使用当前登录用户的 OAuth2 令牌。为此,请使用该值添加X-FI-WARE-OAuth-Source标题。workspaceowner

例子:

MashupPlatform.http.makeRequest(url, {
    requestHeaders: {
        "X-FI-WARE-OAuth-Token": "true",
        "X-FI-WARE-OAuth-Header-Name": "X-Auth-Token",
        "X-FI-WARE-OAuth-Source": "workspaceowner"
    },
    ...
});

未来的考虑:

在生产环境中,出于安全原因,应使用 https 提供使用 OAuth2 身份验证的服务。因此,我们正在考虑在 WireCloud 代理中添加检查,以仅在最终 URL 使用 https 模式时注入 OAuth2 令牌。唯一的例外可能是与 WireCloud 在同一 Intranet 中可用的服务。

于 2015-10-23T13:04:33.250 回答