无法在不提供凭据的情况下使用(win_)uri模块从API检索信息

时间:2019-04-18 09:20:39

标签: windows iis ansible

情况

我有一本配置Windows Server的手册。该剧本是从Ansible的RHEL服务器执行的。 RHEL服务器具有所有必需的kerberos配置,并且Ansible配置为使用Windows主机的kerberos身份验证通过HTTP使用Winrm。所有这些都很好,我只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模块不起作用。我尝试了几种参数组合(这些是注释行),但似乎无法使其正常工作。

输出

enter image description here

1 个答案:

答案 0 :(得分:-2)

根据输出,您的iis设置为使用ntlm aka Windows身份验证而不使用kerberos,它在服务器上无法正常运行的原因是因为您进行了身份验证。 将iis设置更改为匿名