【发布时间】:2020-09-08 19:59:22
【问题描述】:
所以我直接从 Azure (https://docs.microsoft.com/pt-br/azure/iot-hub/iot-hub-devguide-security) 获取 Python 代码来生成 SaS 令牌。我为我的应用程序进行了必要的调整,但是当我使用生成的令牌通过 POST 发送数据时,它返回以下消息:
"Message":"ErrorCode:IotHubUnauthorizedAccess;Unauthorized","ExceptionMessage":"Tracking ID:c8b0d18b771e465081aa9324293adf73-G:1-TimeStamp:09/08/2020 19:53:52"
我知道如何在 VS Code 中使用 Azure 工具生成令牌,但我希望将这一生成合并到代码中。下面是我正在使用的代码。 (当然,将设备 ID、Iot Hub 名称和密钥替换为 microsoft 门户上提供的内容。)
from base64 import b64encode, b64decode
from hashlib import sha256
from time import time
from urllib import parse
from hmac import HMAC
def generate_sas_token(uri, key, policy_name, expiry=3600):
ttl = time() + expiry
sign_key = "%s\n%d" % ((parse.quote_plus(uri)), int(ttl))
#print (sign_key)
signature = b64encode(HMAC(b64decode(key), sign_key.encode('utf-8'), sha256).digest())
rawtoken = {
'sr' : uri,
'sig': signature,
#'se' : str(int(ttl))
}
if policy_name is not None:
rawtoken['skn'] = policy_name
rawtoken['se'] = str(int(ttl))
return 'SharedAccessSignature ' + parse.urlencode(rawtoken)
resource_uri = IoTHubName + ".azure-devices.net" + "/" + "devices" + "/" + deviceID
policy_name = "iothubowner"
uri = resource_uri
key = "primary key="
expiry = 3600
policy= "iothubowner"
print (generate_sas_token(uri, key, policy, expiry))
【问题讨论】:
-
您的问题解决了吗,有进展吗?