【发布时间】:2019-01-31 01:55:56
【问题描述】:
我正在寻找资源来配置 Apache KNOXTOKEN 服务以访问 Apache NIFI REST API。
我已经配置了KNOXSSO,并且能够通过它访问NIFI UI。但是,我找不到资源来通过 Curl 和 JWT 安全地访问 NIFI REST 服务。
感谢指点。
【问题讨论】:
标签: jwt apache-nifi apache-knox
我正在寻找资源来配置 Apache KNOXTOKEN 服务以访问 Apache NIFI REST API。
我已经配置了KNOXSSO,并且能够通过它访问NIFI UI。但是,我找不到资源来通过 Curl 和 JWT 安全地访问 NIFI REST 服务。
感谢指点。
【问题讨论】:
标签: jwt apache-nifi apache-knox
此处对其他建议稍作调整...
与 KnoxSSO 集成时,NiFi 接受 cookie 中的 Knox JWT 令牌。默认情况下,我相信这个 cookie 被命名为hadoop-jwt。如果您尝试使用 curl 访问 NiFi Rest Api,我相信您需要从 Knox 获取 JWT 值(或者可能通过查看浏览器 DevTools 中的 cookie)并将其包含在 curl 请求中的 cookie 中。
如果您在 Authorization 标头中包含 Knox JWT 令牌,则验证将失败。 Authorization 标头中指定的 JWT 必须是 NiFi 生成/签名的令牌。为了验证由 Knox 生成/签名的令牌,NiFi 遵循 Knox 约定。
【讨论】:
-sso,另一个用于 KNOXTOKEN -jwt,具有两种不同的访问模式,但都重定向到同一个后端。 -jwt 端点需要一个带有承载令牌的授权标头,而 -sso 端点需要一个 cookie。我可以说第一个用于api访问,第二个用于浏览器。
对于 SPNEGO 或登录身份提供程序等其他身份验证机制,您可以通过 /access/token 或 /access/kerberos 等端点获取令牌。
我认为 Knox 没有办法做到这一点,因为它需要在浏览器中重定向登录页面的 SSO 工作流程。
您必须首先通过 Knox SSO 对 NiFi UI 进行身份验证,然后使用 Chrome 开发工具之类的工具查看浏览器的本地存储并找到 NiFi UI 为当前用户提供的令牌。
然后您可以使用该令牌通过在 Bearer 标头中传递它来进行 API 调用,例如:
curl -k --header "Authorization: Bearer $token" https://<nifi-host>:<port>/nifi-api/flow/cluster/summary
【讨论】: