Вызов API REST с проверкой подлинности в служебную шину Azure с использованием управляемой идентификации

Служебная шина 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

Я ищу способ сделать то же самое с помощью вызова REST API из политики управления API Azure. Я предоставил 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.


person Joey Eng    schedule 24.09.2019    source источник
comment
Похоже, что он назначает токен заголовку авторизации, кажется довольно стандартным: \   -  person juunas    schedule 24.09.2019
comment
Хм, но могло случиться так, что они указали это не как Authorization: Bearer tokenabcdef....., а как Authorization: tokenabcdef.   -  person juunas    schedule 24.09.2019
comment
@juunas К сожалению, мне не удалось найти никакой документации по этому поводу. Я пробовал использовать ‹authentication-managed-identity resource = servicebus.azure.net /› политику APIM. Он использует формат Bearer {token}, но SB это не нравится.   -  person Joey Eng    schedule 24.09.2019
comment
@juunas Вы были правы! Он работает только со значением токена. Без префикса. Интересно, почему это не задокументировано. Если вы добавите это в качестве ответа, я отдаю вам должное.   -  person Joey Eng    schedule 24.09.2019


Ответы (1)


Похоже, что в SDK это указано не как Authorization: Bearer tokenabcdef....., а как Authorization: tokenabcdef. Что немного необычно.

person juunas    schedule 24.09.2019