使用托管身份对Azure Service Bus进行身份验证的REST API调用

时间:2019-09-24 17:08:18

标签: azure azureservicebus azure-api-management azure-managed-identity

Azure Service Bus支持托管身份访问,但是,例如,我发现的唯一一种将消息发送到队列的方法就是使用这种需要代码和Service Bus SDK的方法:

var tokenProvider = TokenProvider.CreateManagedServiceIdentityTokenProvider();
QueueClient sendClient = new QueueClient($"sb://{Config.Namespace}.servicebus.windows.net/", Config.Queue, tokenProvider);
await sendClient.SendAsync(new Message(Encoding.UTF8.GetBytes(messageInfo.MessageToSend)));
await sendClient.CloseAsync();

来源: https://github.com/Azure-Samples/app-service-msi-servicebus-dotnet https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-managed-service-identity

我正在寻找一种通过Azure API管理策略中的REST API调用执行相同操作的方法。我已授予APIM,基于角色的服务总线访问权限,并且可以取回令牌,但是当尝试使用在Authorization标头中传递的受管理身份令牌进行REST API调用时,我从服务总线获得了此错误: / p>

MalformedToken: The credentials contained in the WRAP header are not well-formed.

服务总线目前可能仅通过其REST API:https://docs.microsoft.com/en-us/rest/api/servicebus/send-message-batch

支持WRAP或SAS令牌。

但是,这又如何在幕后运作呢?

TokenProvider.CreateManagedServiceIdentityTokenProvider()

似乎使用REST API应该可以实现。

1 个答案:

答案 0 :(得分:0)

似乎在SDK中,他们没有将其指定为self.timePicker.setValue(UIColor.black, forKeyPath: "textColor") ,而是将其指定为Authorization: Bearer tokenabcdef.....。这有点不寻常。