因此,我直接从Azure(https://docs.microsoft.com/pt-br/azure/iot-hub/iot-hub-devguide-security)获取了一个Python代码来生成SaS令牌。我对我的应用程序进行了必要的修改,但当我使用生成的令牌通过POST发送数据时,它会返回以下消息:
“消息”:“错误代码:IoTubUnauthorizedAccess;Unauthorized”,“例外消息”:“跟踪ID:c8b0d18b771e465081aa9324293adf73-G:1-时间戳:09/08/2020 19:53:52”
我知道如何在VS代码中使用Azure工具生成令牌,但我希望这一代能够包含在代码中。下面是我正在使用的代码。(当然,将设备ID、Iot集线器名称和密钥替换为microsoft portal上的可用密钥。)
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))
更新
按照教程,一步一步,我可以得到想要的结果。所以可以说,这项服务至少对我是可用的
建议的故障排除步骤:
重新创建
iot
服务,选择不同的区域,并在创建时选择与当前区域不同的其他参数使用与我相同的代码进行测试
如果成功,建议在门户上
raise a support ticket
检查原始服务问题发生的位置。如果失败了,你也可以问他们该怎么做和官方建议私密的
键的值不能以
primary key=
开头我在^{中找到了我的主键。并使用您的测试代码,如官方推荐。它对我有用
你可以在截图中看到我的结果
在我的代码片段中,带有
*
的部分是我在门户上操作的地方,其他代码没有被修改我在门户中的操作。
只需添加并创建一个设备,身份验证类型选择
Symmetric key
相关问题 更多 >
编程相关推荐