【问题标题】:Authenticated REST API call to Azure Service Bus using Managed Identity使用托管标识对 Azure 服务总线进行经过身份验证的 REST API 调用
【发布时间】:2020-01-24 20:45:44
【问题描述】:

Azure 服务总线支持托管标识访问,但是我发现的唯一方法是,例如将消息发送到队列是使用这种需要代码和服务总线 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、基于角色的对服务总线的访问权限,并且我能够取回令牌,但是在尝试使用授权标头中传递的托管身份令牌进行 REST API 调用时,我从服务总线收到此错误:

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

看起来服务总线目前可能只支持 WRAP 或 SAS 令牌及其 REST API:https://docs.microsoft.com/en-us/rest/api/servicebus/send-message-batch

但话说回来,这在幕后是如何运作的?

TokenProvider.CreateManagedServiceIdentityTokenProvider()

似乎应该可以使用 REST API。

【问题讨论】:

  • 似乎将令牌分配给授权标头,似乎很标准:\
  • 嗯,但可能是他们没有将其指定为Authorization: Bearer tokenabcdef.....,而是指定为Authorization: tokenabcdef
  • @juunas 不幸的是,我找不到任何文档。我尝试使用 servicebus.azure.net" /> APIM 策略。它使用“Bearer {token}”格式,但 SB 不喜欢它。
  • @juunas 你是对的!它仅适用于令牌值。没有前缀。我想知道为什么没有记录在案。如果您将其添加为答案,我会给您信用。

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


【解决方案1】:

似乎在 SDK 中他们没有将其指定为 Authorization: Bearer tokenabcdef.....,而是指定为 Authorization: tokenabcdef。这有点不寻常。

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2019-09-08
    相关资源
    最近更新 更多