阅读所有注册 azure notification hub python

Posted

技术标签:

【中文标题】阅读所有注册 azure notification hub python【英文标题】:Read All Registrations azure notification hub python 【发布时间】:2019-01-28 16:07:32 【问题描述】:

我正在尝试检索在 azure 通知中注册的所有设备的列表,但我一直收到相同的错误 [ "401MissingAudience: 提供的令牌没有指定'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 B2C注册。隐藏密码字段,直到输入验证码?

Azure NotificationHubClient 中断 PNS 句柄

Xamarin Android 使用 Asp.Net core web api 连接到 Azure Notification Hub [关闭]