Can't get authentication to work with uri module

I can ssh to the server and curl successfully with authentication:

`
$ curl --user user:password http://localhost:8080/api/v1/clusters
{
“href” : “http://localhost:8080/api/v1/clusters”,
“items” :
}

`

But when I try to use Ansible to get the same url with the same credentials, it fails to authenticate. My task looks like this:

`

`

I get an authentication error from my web service:

`
failed: [172.98.1.129] => {“content”: “{\n "status": 403,\n "message": "Full authentication is required to access this resource"\n}”, “content_length”: “91”, “content_type”: “text/plain;charset=ISO-8859-1”, “failed”: true, “redirected”: false, “server”: “Jetty(7.6.7.v20120910)”, “set_cookie”: “AMBARISESSIONID=7ek08rb33476kg9z8jyiw40y;Path=/”, “status”: 403}
msg: Status code was not [200]

`

I’m definitely using the correct username and password in both places.

So my question is how does the uri module’s authentication differ from curl?

Just a guess:

Curl uses preemptive authentication, i.e. sends the Authorization header on the first contact.

URL first goes to the resource and only sends authorization data on a second call, after it received http/401 on the first call.

My suggestion: use curl here. IIRR, there is already a PR for preemptive authorization.

Regards
Mirko

You need to specify the force_basic_auth option with a value of yes/true and things should start working

force_basic auth did not work, getting 401:

  • name: Get License
    uri:
    url: http://{{ ansible_host }}:{{ artifactory_port }}/artifactory/api/system/licenses
    method: GET
    user: “{{ artifactory_admin.user }}”
    passwd: “{{ artifactory_admin.password }}”
    force_basic_auth: yes
    return_content: yes

But, this works fine:

  • name: Get License
    uri:
    url: http://{{ artifactory_admin.user }}:{{ artifactory_admin.password }}@{{ ansible_host }}:{{ artifactory_port }}/artifactory/api/system/licenses
    method: GET
    return_content: yes

Anyway to get user and password to work?