Quantcast
Channel: Azure フォーラム
Viewing all articles
Browse latest Browse all 1798

Push Notifications REST APIs の認証トークンをSDKなしで生成

$
0
0

Service Bus 通知ハブを利用してプッシュ通知を送信したいのですが、
Webアプリケーションの機能に追加するためPHPで実装しています。

http://msdn.microsoft.com/en-us/library/windowsazure/dn223264.aspx

単純なHTTPクライアントから上記の REST API をコールしたいのですが、
リクエストヘッダによる認証に失敗して401が出ます。

Shared Access Signature Authentication with Service Bus
http://msdn.microsoft.com/en-us/library/windowsazure/dn170477.aspx

認証トークンは上記の記事を参考に以下のコードで生成しています。
値は仮のものに変えてありますが、

Service Bus の Namespace Name : ns-foo
ns-foo の Notification Hub の Name: nh-bar

とすると、

$uri = "https://ns-foo.servicebus.windows.net/nh-bar/messages/?api-version=2013-08";
$client->setUri($uri);

$client->setHeaders("content-type", "application/json;charset=utf-8");
$client->setHeaders("ServiceBusNotification-Format", "gcm");

$keyName = "DefaultSendSharedAccessSignature";
$expiry = strval(time() + 10000);
$resourceUri = "http://ns-foo.servicebus.windows.net/nh-bar";
$stringToSign = $resourceUri . "\n" . $expiry;
$primaryKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$signature = hash_hmac('sha256', $stringToSign, $primaryKey, false);
$token = sprintf("SharedAccessSignature sig=%s&se=%s&skn=%s&sr=%s", $signature, $expiry, $keyName, urlencode($resourceUri));

$client->setHeaders("Authorization", $token);

$json = '{ "collapse_key": "score_update" }';
$client->setRawData($json, 'text/plain');

$client->setMethod(Zend_Http_Client::POST);
$response = $client->request();

レスポンスのメッセージは、


40103: Invalid authorization token signature

です。
MalformedToken など各種エラーを経て修正した結果がこれなので、
ヘッダの書式そのものは正しいはずです。

メッセージによるとシグネチャが不正とのことなので、
リソースURIか、ハッシュ化の手順のどこかが間違っているのでしょうか。

KEY NAME, PRIMARY KEY については認証規則の値を確認済みです。

おかしい部分がありましたらご指摘下さい。
よろしくお願いします。


Viewing all articles
Browse latest Browse all 1798

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>