阅读所有注册 azure notification hub python
Posted
技术标签:
【中文标题】阅读所有注册 azure notification hub python【英文标题】:Read All Registrations azure notification hub python 【发布时间】:2019-01-28 16:07:32 【问题描述】:我正在尝试检索在 azure 通知中注册的所有设备的列表,但我一直收到相同的错误
[
"401
MissingAudience: 提供的令牌没有指定'Audience'..TrackingId:38d0f9f4-9836-498",
“2-a1d9-60f5ceed7210_G7,时间戳:2019 年 1 月 28 日下午 3:59:33”
]
domain = "https://mnamespace1.servicebus.windows.net"
url = domain + "/notificationhub/registrations/?api-version=2017-11"
r = requests.get(url, headers =
# "Content-Type": "application/atom+xml;type=entry;charset=utf-8",
"authorization": 'WRAP access_token ="QeXuRZO2ATZM8jolXFYPDvQb4zWSzifmWvpS8eb5FLM="',
"x-ms-version": "2017-11")
print (Response(r))
【问题讨论】:
【参考方案1】:根据你的错误信息和代码,问题是由于sas token生成错误造成的。
根据 REST API Read All Registrations
的描述,该 api 的正确 sas 令牌应如下所示,请参阅 Create SAS Security Token
部分了解如何生成。
SharedAccessSignature sr=https%3A%2F%2F<your servicebus name>.servicebus.windows.net%2F<your notification hub name>&sig=<signature with urlencode>&se=<expires>&skn=<police name, such as DefaultFullSharedAccessSignature>
上面的SAS token和EventHub是一样的,所以EventHub可以参考Python中的示例代码来生成,Notification Hub的写法请参考Generate SAS token
for Python。
这是我的示例代码。
import time
from urllib import parse
import hmac
import hashlib
import base64
def generate_sas_token(uri, sas_name, sas_value):
target_uri = parse.quote_plus(uri)
sas = sas_value.encode('utf-8')
expiry = str(int(time.time() + 10000))
string_to_sign = (target_uri + '\n' + expiry).encode('utf-8')
signed_hmac_sha256 = hmac.HMAC(sas, string_to_sign, hashlib.sha256)
signature = parse.quote(base64.b64encode(signed_hmac_sha256.digest()))
return 'SharedAccessSignature sr=&sig=&se=&skn=' \
.format(target_uri, signature, expiry, sas_name)
api_version = '2017-11'
uri = 'https://<your servicebus name>.servicebus.windows.net/<your notificationhub name>/registrations/?api-version='.format(api_version)
sas_name = '<SharedAccessKeyName>' # for example, DefaultFullSharedAccessSignature
sas_value = '<SharedAccessKey>'
sas_token = generate_sas_token(uri, sas_name, sas_token)
然后,您可以得到 REST API 的响应,如下所示。
import requests
headers =
'Authorization':sas_token,
'x-ms-version':api_version
r = requests.get(uri, headers=headers)
print(r.text)
【讨论】:
以上是关于阅读所有注册 azure notification hub python的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure Notification Hub 中将 iOS 设备注册的到期日期设置为 31-12-9999 23:59:59?
如何获取iOS设备的Azure Notification Hub RegistrationId?
Azure NotificationHubClient 中断 PNS 句柄
Xamarin Android 使用 Asp.Net core web api 连接到 Azure Notification Hub [关闭]