Duo API Bash Call

时间:2017-11-07 19:33:20

标签: python bash shell api curl

我尝试使用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中。

2 个答案:

答案 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},“统计”:“确定”}

参考:Duo Api docs section on authentication