如何仅为一个设备/服务生成Azure IoT中心SAS令牌?

时间:2019-01-10 14:44:29

标签: azure mqtt azure-iot-hub

我想生成一个新的SAS令牌,以使用带有Java的Paho MQTT访问Azure IoT中心。我想从后端Java服务中检索MQTT消息。

我当然想将每个服务实例的访问限制为某些设备。

这是我用来生成令牌的命令。

az iot hub generate-sas-token -d device1 -n iothubname --policy device

这是我收到的错误消息

{u'ExceptionMessage': u'Tracking ID<HIDDEN`enter code here`>:TimeStamp:01/01/2019 14:30:33', u'Message': u'ErrorCode:IotHubUnauthorizedAccess;Unauthorized'}

在尝试之前,我尝试使用策略“服务”(因为令牌应由后端服务使用),该策略也不起作用:

az iot hub generate-sas-token -d device1 -n iothubname --policy service

{u'ExceptionMessage': u'Tracking ID:<>TimeStamp:01/01/2019 14:37:39', u'Message': u'ErrorCode:IotHubUnauthorizedAccess;Unauthorized'}

唯一有效的方法是az iot hub generate-sas-token -n iothubname,但是对于文档来说,这会创建一个带有iothubowner策略的令牌,而我不想为我的后端服务提供一个令牌。

即使阅读了3次文档,我仍然无法真正理解Azure IoT中心上的权限的概念:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-security#iot-hub-permissions

我什么时候使用service策略,什么时候使用device策略?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试

az iot hub generate-sas-token -n [IoTHub Name] --policy registryRead --key-type secondary

您可以在以下链接的示例中看到相同的细节

https://docs.microsoft.com/en-us/cli/azure/ext/azure-cli-iot-ext/iot/hub?view=azure-cli-latest#ext-azure-cli-iot-ext-az-iot-hub-generate-sas-token