脚本 cURl API: 消息":"签名无效"



我正在尝试使用OVH API来更新DNS区域条目。我正在使用带有cURL命令的shell脚本,但我收到了以下错误:

{"message":"Invalid signature","httpCode":"400 Bad Request","errorCode":"INVALID_SIGNATURE"}

这是脚本:

OVH_CONSUMER_KEY="XXXXX"
OVH_APP_KEY="XXXXX"
OVH_APP_SECRET="XXXXX"
HTTP_METHOD="POST"
HTTP_QUERY="https://api.ovh.com/1.0/domain/zone/domaine.fr/record"
HTTP_BODY=""
TIME=$(curl -s https://api.ovh.com/1.0/auth/time)
CLEAR_SIGN="$OVH_APP_SECRET+$OVH_CONSUMER_KEY+$HTTP_METHOD+$HTTP_QUERY+$HTTP_BODY+$TIME"
SIG='$1$'$(echo -n $CLEAR_SIGN | openssl dgst -sha1 | sed -e 's/^.* //')
curl -X $HTTP_METHOD 
$HTTP_QUERY 
-H "Content-Type:application/json;charset=utf-8" 
-H "X-Ovh-Application:$OVH_APP_KEY" 
-H "X-Ovh-Timestamp:$TIME" 
-H "X-Ovh-Signature:$SIG" 
-H "X-Ovh-Consumer:$OVH_CONSUMER_KEY" 
-d '{"fieldType":"TXT", "subDomain":"", "target":"VX=SPF"}'

但使用此脚本效果良好:

OVH_CONSUMER_KEY="XXXXX"
OVH_APP_KEY="XXXXX"
OVH_APP_SECRET="XXXXX"
HTTP_METHOD="GET"
HTTP_QUERY="https://api.ovh.com/1.0/domain"
HTTP_BODY=""
TIME=$(curl -s https://api.ovh.com/1.0/auth/time)
CLEAR_SIGN="$OVH_APP_SECRET+$OVH_CONSUMER_KEY+$HTTP_METHOD+$HTTP_QUERY+$HTTP_BODY+$TIME"
SIG='$1$'$(echo -n $CLEAR_SIGN | openssl dgst -sha1 | sed -e 's/^.* //')
curl -X $HTTP_METHOD 
$HTTP_QUERY 
-H "Content-Type:application/json;charset=utf-8" 
-H "X-Ovh-Application:$OVH_APP_KEY" 
-H "X-Ovh-Timestamp:$TIME" 
-H "X-Ovh-Signature:$SIG" 
-H "X-Ovh-Consumer:$OVH_CONSUMER_KEY"

这两个脚本之间的区别是:

  • HTTP_METHOD
  • HTTP_QUERY
  • 数据

你知道为什么吗?

谢谢L.

解决方案如下:

OVH_CONSUMER_KEY="XXXXX"
OVH_APP_KEY="XXXXX"
OVH_APP_SECRET="XXXXX"
HTTP_METHOD="POST"
HTTP_QUERY="https://api.ovh.com/1.0/domain/zone/domaine.fr/record"
txt_type="TXT"
txt_field=""
txt_value='"XXXXXXXXXXXXXXX"'
HTTP_BODY="{"fieldType":"$txt_type","subDomain":"$txt_field","target":"$txt_value"}"
TIME=$(curl -s https://api.ovh.com/1.0/auth/time)
CLEAR_SIGN=$OVH_APP_SECRET"+"$OVH_CONSUMER_KEY"+"$HTTP_METHOD"+"$HTTP_QUERY"+"$HTTP_BODY"+"$TIME
SIG='$1$'$(echo -n $CLEAR_SIGN | openssl dgst -sha1 -hex | cut -f 2 -d ' ' )
curl -X $HTTP_METHOD 
$HTTP_QUERY 
-H "Content-Type: application/json" 
-H "X-Ovh-Application: $OVH_APP_KEY" 
-H "X-Ovh-Timestamp: $TIME" 
-H "X-Ovh-Signature: $SIG" 
-H "X-Ovh-Consumer: $OVH_CONSUMER_KEY" 
--data "$HTTP_BODY"

最新更新