APNS メッセージに Notification Hubs を使用するアプリの自動テスト サービスを構築しています。このプロセスの一部でプッシュ メッセージが実行されるため、何らかのスクリプトで Notification Hubs を作成する自動化された方法が必要です (私は Ruby を試していますが、OSX 向けのコマンド ライン指向であれば何でも動作します - 必要に応じて切り替えます)。
私はこの API ガイドに従っています: http://msdn.microsoft.com/en-us/library/azure/dn223269.aspx (編集: 修正されたリンク) および SAS 情報はこちら: http://msdn.microsoft.com/ en-us/library/azure/dn170477.aspx
利用可能な SDK のいずれもこの特定の機能を公開していないように見えるため、mybus.servicebus.windows.net の下に新しい通知ハブ「testhub」を「手動で」作成しようとしています。
すべての試行で 401 エラーが生成されます - 「InvalidSignature: トークンに無効な署名があります」
SAS ガイドには、リソース URI がどうあるべきかについては言及されていません。mybus.servicebus.windows.net と mybus.servicebus.windows.net/testhub を http:// または https:// の有無にかかわらず試してみました - SAS 情報には https: と末尾の「testhub」が表示されます。エンドポイントから sb:// も試しました。ただし、API ガイドには、表示される SAS にハブ名が含まれていない例のセクションがあります。コンボは私にはうまくいかないようでした。
この実装は、github の azure-push ruby コードから持ち上げました。
require 'azure'
def MakeSASToken(url, key_name, access_key, lifetime)
target_uri = CGI.escape(url.downcase).gsub('+', '%20').downcase
expires = Time.now.to_i + lifetime
to_sign = "#{target_uri}\n#{expires}"
signature = CGI.escape( Base64.strict_encode64( Digest::HMAC.digest(to_sign, access_key, Digest::SHA256))).gsub('+', '%20')
return "SharedAccessSignature sig=#{signature}&se=#{expires}&skn=#{key_name}sr=#{target_uri}"
end
DefaultAccessKey = 'RootManageSharedAccessKey'
Putrequest = 'mybus.servicebus.windows.net'
KeyValue='=Hsuperduperkeyvalue0='
puts "Creating request for #{Putrequest}"
tok = MakeSASToken("#{Putrequest}", DefaultAccessKey, KeyValue, 30)
puts tok`
有効なトークンが生成されないようです - 何が欠けていますか?