http - 使用 uri 模块的 SPNEGO 身份验证

标签 http ansible uri kerberos spnego

在执行 kinit

之后,使用 curl 我可以通过 Kerberos/SPNEGO 以这种方式访问​​ Web 服务上的 HTTP 资源
curl -x POST --negotiate -u : http://host.mydomain.net:14000/my/web/resource

你可以看到我只是通过 -u : 而没有实际传递任何用户/密码,它之所以有效是因为 --negotiate

使用 ansible 我可以访问资源,但我需要输入我的凭据

 - uri:
     url: "http://host.mydomain.net:14000/my/web/resource"
     return_content: true
     method: POST
     headers:
       Content-Type: "application/x-www-form-urlencoded"
     user: "{{ myuser }}"
     password: "{{ mypass }}"
   register: login

 - debug:
     msg: "{{ login.content }}"

现在我喜欢只使用 Kerberos 身份验证访问资源,以便执行程序将使用它的凭据,我尝试将 userpassword 参数定义为空,但这失败了。

所以我想知道 uri 模块是否支持 SPNEGO 以及我应该怎么做?

谢谢

最佳答案

在这里 curl 提交者...

这是行不通的。 Curl 无法为您进行身份验证。身份验证必须在登录机器/服务器时进行。既然你想自动化,创建一个服务帐户,导出 key 表并将 key 表文件与 env var KRB5_CLIENT_KTNAME 一起提供给 Ansible。这会起作用,但您需要 MIT Kerberos。

请阅读我的canonical answer对此。如果您在 Active Directory 环境中,您可以轻松使用 msktutil(1),它会为您完成所有的魔法。

关于http - 使用 uri 模块的 SPNEGO 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51668911/

相关文章:

http - 使用http时使用delete函数删除 map 条目

asp.net-core - Blazor 项目中出现 "No connection could be made because the target machine actively refused it."错误

docker - 使用 Ansible 部署 docker 时如何设置运行参数?

google-compute-engine - Ansible - 如何基于元数据定位 GCE

java - 如何在 Android 上以编程方式删除文件?

rest - HTTP GET 设置内部数据,还算 RESTful 吗?

http - SPDY 协议(protocol)是否消除了对无 cookie 域的需求?

ansible - 为什么 kubespray ansible 无法匹配主机

nginx - 如何使用 NGINX 作为反向代理来路由第一个 URI 段?

.net - 如何使Uri.EscapeDataString符合RFC 3986