uri 模块中出现 ansible 401 错误,但 shell 卷曲可以工作

问题描述 投票:0回答:2

我已经尝试了ansible中的uri模块,但仍然出现401身份验证错误。 在 shell 模块中,当我使用curl 时,一切正常。 有人可以尝试翻译成 uri 代码吗?

- name: Get authentication token
  uri:
    url: https://myIPcontrol.com:8443/inc-rest/api/v1/login
    method: POST
    timeout: 30
    validate_certs: no
    headers:
        Content-Type: application/x-www-form-urlencoded
        Accept: application/json
    body:
      username: admin
      password: mypsw
    body_format: json
    return_content: yes
  register: authtoken
  
  
- name: Get authentication token
  shell: "curl -k  --header 'Content-Type: application/x-www-form-urlencoded' --header 'Accept: 
      application/json' -d 'username=admin&password=mypsw' -X POST  
      https://myIPcontrol.com:8443/inc-rest/api/v1/login"
  register: authtoken
ansible
2个回答
3
投票

通过 shell 执行时,您的主体 (

-d
) 将作为
username=admin&password=mypsw
传递。这个结构是
form-urlencoded
,但您正在传递
body_format: json
,因此 Ansible 将正文作为
{"user":"admin","password":"mypsw"}
传递,与您设置的
Content-Type
标头冲突。

改为使用

body:
  username: admin
  password: mypsw
body_format: form-urlencoded

其余的对我来说看起来是正确的。 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/uri_module.html


0
投票

当 API 调用需要身份验证时,请根据 ansible.builtin.uri 模块使用 force_basic_auth 标志,并将其设置为“yes”。当相应的 Web 服务未响应 401 错误响应时,需要执行此操作,这将强制 Ansible 发送身份验证请求。

这是一个例子:

- name: Get repository variables
  ansible.builtin.uri:
    url: https://api.bitbucket.org/2.0/repositories/SAMPLE_PROJECT/SAMPLE_REPO/commits
    method: POST
    user: TESTUSER
    password: TESTPASSWORD
    force_basic_auth: yes
    headers:
      Accept: application/json
    return_content: yes
    body_format: json
© www.soinside.com 2019 - 2024. All rights reserved.