2016-08-31 9 views
0

通知を送信するためにDirect Batch send APIを実装しようとしています。 Postmanを使用してリクエストをシミュレートします。無効な認証トークンエラーが返されます。直接バッチを実装する方法Microsoft Azure APIを送信する

POSTリクエスト:

https://mynamespace.servicebus.windows.net/myHub/messages/ $バッチ直接& APIバージョン= 2015から08

ヘッダ以下の場合:?

のContent-Type:アプリケーション/ JSON 認証:SharedAccessSignature SR = https://mynamespace.servicebus.windows.net/myHub/messages/ $ batch?direct%3fapi-version%3d2015-01 & sig = xxxx & se = xxxx & skn = DefaultFullSharedAccessSignature

このエラーを解決するにはどうすればよいですか?

はまた、APNS例があります:

POST https://{Namespace}.servicebus.windows.net/{Notification Hub}/messages/$batch?direct&api-version=2015-08 HTTP/1.1 
Content-Type: multipart/mixed; boundary="simple-boundary" 
Authorization: SharedAccessSignature sr=https%3a%2f%2f{Namespace}.servicebus.windows.net%2f{Notification Hub}%2fmessages%2f%24batch%3fdirect%26api-version%3d2015-08&sig={Signature}&skn=DefaultFullSharedAccessSignature 
ServiceBusNotification-Format: apple 
Host: {Namespace}.servicebus.windows.net 
Content-Length: 511 
Expect: 100-continue 
Connection: Keep-Alive 


--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=notification 

{"aps":{"alert":"Hello using APNS via Direct Batch Send!!!"}} 
--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=devices 

['Device Token1','Device Token2','Device Token3'] 
--simple-boundary-- 


--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=notification 

{"aps":{"alert":"Hello using APNS via Direct Batch Send!!!"}} 
--simple-boundary 
Content-Type: application/json 
Content-Disposition: inline; name=devices 

['Device Token1','Device Token2','Device Token3'] 
--simple-boundary-- 

ポストマンでそれをテストする方法は?

答えて

0

NotificationHubs SDKを使用してダイレクトバッチ送信を呼び出そうとしましたか?はいの場合は、SDKのhttpリクエストとPostmanの送信リクエストを比較できますか?

また、Authorizationヘッダーの記入に関するドキュメントには、いくつかの誤りがあります。 C#のコードの下に、正しい方法で行う方法が示されています。

string GenerateSasToken(Uri uri, string sasKeyName, string sasKeyValue) 
{ 
    var targetUri = HttpUtility.UrlEncode(uri.ToString().ToLower(), Encoding.UTF8).ToLower(); 
    var expiresOnDate = Convert.ToInt64(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds) + 60*60 /* one hour */; 
    var toSign = targetUri + "\n" + expiresOnDate; 

    var keyBytes = Encoding.UTF8.GetBytes(sasKeyValue); 
    var mac = new HMACSHA256(keyBytes); 
    mac.Initialize(); 
    var rawHmac = mac.ComputeHash(Encoding.UTF8.GetBytes(toSign)); 
    var signature = HttpUtility.UrlEncode(Convert.ToBase64String(rawHmac), Encoding.UTF8); 

    var token = "SharedAccessSignature sr=" + targetUri + "&sig=" + signature + "&se=" + expiresOnDate + "&skn=" + sasKeyName; 
    return token; 
} 
関連する問題