我尝试使用Curl来使用DUO API执行调用。
我在这里审核了他们的文档:https://duo.com/docs/adminapi#authentication
文档说要将信用卡作为HMAC密钥传递给请求,但现在确定如何实现这一目标。
这是我到目前为止所得到的:
curl --request GET \
--header 'Authorization: Basic 'Integration key:Secret key'' \
--header "Content-Type: application/x-www-form-urlencoded" \
"https://api-12345678.duosecurity.com/auth/v2/check"
返回
{"code": 40101, "message": "Missing request credentials", "stat": "FAIL"}
我可以指出正确的方向,以便在Bash中找到一个例子。如果不是在Python中。
答案 0 :(得分:1)
首先,您的请求格式似乎不正确,因为Integration key:Secret key''
位于标题之外(请查看问题中突出显示语法的方式)。
尝试:
curl --request GET \
--header 'Authorization: Basic' \
--header 'Integration key: Secret key' \
--header 'Date: Tue, 21 Aug 2012 17:29:18 -0000' \
--header "Content-Type: application/x-www-form-urlencoded" \
"https://api-12345678.duosecurity.com/auth/v2/check"
标题名称包含空格和小写字母Integration key
有点不常见,因此您可能需要尝试变体,例如Integration-Key
。
第二次,401xx
系列错误mean:
401“授权”,“日期”和/或“内容类型”标题丢失或无效。
您需要添加authenticator所需的Date
标题。
答案 1 :(得分:0)
万一其他人迷迷糊糊,这就是我的想法:
#!/bin/bash -u
FORM="Content-Type: application/x-www-form-urlencoded"
NOW=$(date -R)
#get these from the Duo Admin interface
INT="<integration key>"
KEY="<secret passcode>"
API="<api host>.duosecurity.com"
URL="/auth/v2/check"
REQ="$NOW\nGET\n$API\n$URL\n"
#could also use awk here, or the --binary mode as suggested elsewhere
HMAC=$(echo -n "$REQ" | openssl sha1 -hmac "$KEY" | cut -d" " -f 2)
AUTH=$(echo -n "$INT:$HMAC" | base64 -w0)
curl -s -H "Date: $NOW" -H $FORM -H "Authorization: Basic $AUTH" https://$API$URL
运行此命令会得到:
{“响应”:{“时间”:1539726254},“统计”:“确定”}