将Barracuda REST API与Ansible-token身份验证结合使用不会';行不通

将Barracuda REST API与Ansible-token身份验证结合使用不会';行不通,rest,api,curl,ansible,Rest,Api,Curl,Ansible,我正在尝试使用and,而当我使用cURL(来自文档)时,它会起作用: 请求: $ curl -X POST \ -H "Content-Type:application/json" \ -d '{"username": "admin", "password": "admin"}' \ http://10.11.19.104:8000/restapi/v2/login 答复: {“令牌”:“Eyjldci6ijezodaymze3ntciljwyxnzd29yzci6imy3nzy2ztfmtg

我正在尝试使用and,而当我使用cURL(来自文档)时,它会起作用:

请求:

$ curl
-X POST \
-H "Content-Type:application/json" \
-d '{"username": "admin", "password": "admin"}' \ http://10.11.19.104:8000/restapi/v2/login
答复:

{“令牌”:“Eyjldci6ijezodaymze3ntciljwyxnzd29yzci6imy3nzy2ztfmtgwmzgynmme1ytazzwzlmzcy\nyzgzotmyiiwidxnlci6imfkbwluin0=\n”}

然后我们应该使用该令牌在API上执行命令,比如:

$ curl
-X GET \
-H "Content-Type:application/json" \ 
-u 'eyJldCI6IjEzODAyMzE3NTciLCJwYXNzd29yZCI6ImY3NzY2ZTFmNTgwMzgyNmE1YTAzZWZlMzcy\nYzgzOTMyIiwidXNlciI6ImFkbWluIn0=\n': \
http://10.11.19.104:8000/restapi/v2/virtual_service_groups
它将给我一个响应列表(在本例中)我的虚拟服务组,它与cURL一起工作

现在,当我尝试使用ansible做同样的事情时,验证的第一步是成功的(我甚至可以将生成的令牌与cURL一起使用,它接受它),但是使用生成的令牌运行命令的第二步总是给我401错误(无效凭据):

我的剧本的输出:

TASK [loadbalancer : login into the load balancer] *****************************
ok: [localhost]

TASK [loadbalancer : debug] ****************************************************
ok: [localhost] => {
    "msg": "eyJldCI9IjE0ODQ2MDcxNTAiXCJwYXNzd29yZCI6IjRmM2TlYWMwN2ExNmUxYWFhNGEwNTU5NTMw\nZGQ3ZmM3IiwiaXNlciI6IndpYSJ9\n"
}

TASK [loadbalancer : get] ******************************************************
fatal: [localhost]: FAILED! => {"changed": false, "connection": "close", "content": "{\"error\":{\"msg\":\"Please log in to get valid token\",\"status\":401,\"type\":\"Invalid Credentials\"}}", "content_type": "application/json; charset=utf8", "date": "Mon, 16 Jan 2017 22:32:30 GMT", "failed": true, "json": {"error": {"msg": "Please log in to get valid token", "status": 401, "type": "Invalid Credentials"}}, "msg": "Status code was not [200]: HTTP Error 401: ", "redirected": false, "server": "BarracudaHTTP 4.0", "status": 401, "transfer_encoding": "chunked", "url": "http://10.11.19.104:8000/restapi/v2/virtual_service_groups"}

用户
参数中的“{{login.json.token}:”中删除冒号。使用:

user: "{{ login.json.token }}"
冒号不是用户名的一部分,而是
curl
语法(在您的示例中用于避免交互式密码提示):

-u,--user
[ ]
如果只指定用户名,curl将提示输入密码。

几乎!经过一点测试和错误(加上wireshark),我发现我需要删除冒号并添加一个空密码参数:
用户:“{login.json.token}}”密码:
确保无论您是否指定空密码,传递给服务器的结果值都是相同的。我不太明白你为什么要添加它。如果没有那行,它根本不会传递任何东西(我在wireshark上检查过,只有用户名/令牌值,密码没有空字段)。
user: "{{ login.json.token }}"
-u, --user <user:password>
    [ ]
    If you simply specify the user name, curl will prompt for a password.