windows - 在不提供凭据的情况下,无法使用 (win_)uri 模块从 API 检索信息
问题描述
情况
我有一本用于配置 Windows Server 的剧本。该剧本是从带有 Ansible 的 RHEL 服务器执行的。RHEL 服务器具有所有必需的 kerberos 配置,并且 Ansible 配置为通过 HTTP 使用 winrm,对 windows 主机使用 kerberos 身份验证。所有这一切都很好,我只有kinit
一次,一切正常。
对于剧本中的一项任务,我需要首先从 REST API 中检索一些信息。REST API 托管在使用 IIS 的 Windows 服务器上,并具有 Windows 身份验证。
问题
我想使用win_uri
或uri
模块从 REST API 检索信息,但我不想提供凭据。它使用(win_)shell
模块工作,为什么它不适用于(win_)uri
模块?
剧本
---
- name: API Test
vars_files:
- secret.yml
vars:
api_url: http://iiswebserver.my.domain/api/item/0
hosts:
- windowshost.my.domain
gather_facts: no
#debugger: on_failed
tasks:
- name: Win Shell
win_shell: |
Invoke-RestMethod -Method Get -Uri {{ api_url }} -UseDefaultCredentials
register: win_shell_get
- name: Local Shell
shell: |
curl --negotiate -u : {{ api_url }}
register: shell_get
delegate_to: localhost
- name: Get API info remote
win_uri:
url: "{{ api_url }}"
method: GET
return_content: yes
user: "{{ secret_user }}"
password: "{{ secret_password }}"
#delegate_to: localhost
register: api_get
- name: Get API info local
uri:
url: "{{ api_url }}"
method: GET
return_content: yes
#user: "{{ secret_user }}"
#password: "{{ secret_password }}"
#other: --negotiate
delegate_to: localhost
register: api_get_local
什么有效
两个 shell 任务都可以在不输入凭据的情况下正常工作。
什么不起作用
win_uri
仅当我传递我不想要的凭据时,才使用该模块。win_uri 模块在目标主机上的系统上下文下执行,并且由于 shell 命令有效,我假设该win_uri
模块也应该有效。
在本地主机上使用该uri
模块不起作用。我尝试了几种参数组合(那些是注释行),但我似乎无法让它工作。
输出
解决方案
根据您的输出,您的 iis 设置为在没有 kerberos 的情况下使用 ntlm aka windows 身份验证,它在没有 ansible 的情况下在服务器上工作的原因是因为您进行了身份验证。将 iis 设置更改为匿名
推荐阅读
- pandas - pandas grouby 根据多个条件对日期时间列进行计数
- javascript - 自动完成中的 React Material UI 打开模式失去焦点
- java - 此查询中的 sql 语法错误是什么?
- c - 如何使用 GResource 在 Gtk3 中加载图标
- c# - 使用泛型 C# 使用 where 子句进行选择
- php - TDD:模拟对象堆栈的最佳实践
- mysql - 在查询构建器中实现 SQL 时出现问题
- laravel - 使用 Vue.Js / Inertia.js 和 Laravel 对结果进行分页
- r - R:每行创建数据框行,其中包含命名列和类型列
- docker - 多阶段 Docker 映像