首页 > 解决方案 > 在不提供凭据的情况下,无法使用 (win_)uri 模块从 API 检索信息

问题描述

情况

我有一本用于配置 Windows Server 的剧本。该剧本是从带有 Ansible 的 RHEL 服务器执行的。RHEL 服务器具有所有必需的 kerberos 配置,并且 Ansible 配置为通过 HTTP 使用 winrm,对 windows 主机使用 kerberos 身份验证。所有这一切都很好,我只有kinit一次,一切正常。

对于剧本中的一项任务,我需要首先从 REST API 中检索一些信息。REST API 托管在使用 IIS 的 Windows 服务器上,并具有 Windows 身份验证。

问题

我想使用win_uriuri模块从 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模块不起作用。我尝试了几种参数组合(那些是注释行),但我似乎无法让它工作。

输出

在此处输入图像描述

标签: windowsiisansible

解决方案


根据您的输出,您的 iis 设置为在没有 kerberos 的情况下使用 ntlm aka windows 身份验证,它在没有 ansible 的情况下在服务器上工作的原因是因为您进行了身份验证。将 iis 设置更改为匿名


推荐阅读