Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

对于已经设置 kerberos 权限的集群,访问各种组件的 HTTP 服务时会要求认证。如果客户端是 Windows,那么配置过程就比较复杂。

某些服务,例如 Apache Knox 通过转发的方式进行代理,可以进行 SPNEGO 鉴权。

我实现的是基于浏览器代理的方式修改请求头,并注入 token,以此完成鉴权。

HTTP 代理

HTTP 因为是明文传输,所以代理程序可以直接读取请求的内容。将内容完整转发,并将请求体返回,就完成了代理。

对于 HTTPS 这种情况,通过 CONNECT 请求的方式,让代理服务建立一条 tcp 连接隧道,通过更底层的协议,转发 HTTPS 流量。

SPNEGO 鉴权过程

对 HTTP Header 中的 Authorization 字段填入 token,服务器即可验证访问者的身份。jdk 实现了生成 token 这部分功能,调用接口即可。

后面发现基于 jaas 获取 token 配置有点麻烦,找到下层的 LoginContext,基于它的 api 实现了用户名密码校验。

实现

代码:https://github.com/simileas/spnego-proxy