【发布时间】:2015-08-01 01:45:37
【问题描述】:
我无法生成“正确”的身份验证字符串以供何时使用 通过 curl 向 Pusher 发送消息
这是我的脚本,其中的秘密部分当然被删掉了:
#!/bin/bash
key="my_key"
secret="my_secret"
appID="my_app_id"
timestamp=`date +%s`
data='{"name":"say_stuff","channel":"test","data":"{\"message\":\"oh_yeah\"}"}'
md5data=`echo "$data" | md5`
authSig=`echo 'POST\n/apps/"$appID"/events\nauth_key="$key"&auth_timestamp="$timestamp"&auth_version=1.0&body_md5="$md5data"' | openssl dgst -sha256 -hex -hmac "$secret"`
curl -H "Content-Type:application/json" -d "$data" "http://api.pusherapp.com/apps/$appID/events?body_md5=$md5data&auth_version=1.0&auth_key=$key&auth_timestamp=$timestamp&auth_signature=$authSig"
authSig 肯定是生成的,看起来像有效的 HmacSHA256Hex
但是,当它运行 curl 命令时,我得到以下响应:
Invalid signature: you should have sent HmacSHA256Hex("POST\n/apps/$appID/events\nauth_key=$key&auth_timestamp=1432086733&auth_version=1.0&body_md5=e5997a811232ffae050be74242254ceb", your_secret_key), but you sent "55029a5e2d1058b352b5c22709e7fb9cb0c6f147846ed09dbc6bcaf6a7a804c7"
我的机器 (Mac OS X 10.10) 上的 openssl 实用程序是否可能与 Pusher 的不同?
这是我现在注意到的一些有趣的事情。如果你去这里:
https://pusher.com/docs/rest_api
然后向下滚动到“有效的身份验证示例”,您将能够按照示例进行操作。
我尝试通过运行以下示例生成签名:
echo 'POST\n/apps/3/events\nauth_key=278d425bdf160c739803&auth_timestamp=1353088179&auth_version=1.0&body_md5=ec365a775a4cd0599faeb73354201b6f' | openssl dgst -sha256 -hex -hmac 7ad3773142a6692b25b8
我得到了
aa368756587116f3997427fe1b315ed0e2f2faa555066e565a25cfe6f47c9396
与他们的例子相反
da454824c97ba181a32ccc17a72625ba02771f50b50e1e7430e47a1f3f457e6c
【问题讨论】:
-
这可能是也可能不是您的问题的原因,但是您应该双引号所有变量引用以保护它们免受意外的shell扩展(由shell解释);
"$data",而不是$data,"$secret",而不是$secret,... -
试过了,同样的问题...
-
知道了;请在您的问题中添加双引号,以免分散注意力。
-
感谢更新,但我的意思是:双引号变量引用除非它们已经在(更大的)双引号字符串中。
-
对不起!没有意识到这个潜在的问题。不过还是坏了……