Невозможно сгенерировать SAS в Azure APIM с помощью образца Microsoft

Кому-нибудь удалось создать SAS для хранилища BLOB-объектов в Azure APIM, следуя приведенному ниже образцу?

https://docs.microsoft.com/en-us/azure/api-management/policies/generate-shared-access-signature.

Заменили ключи доступа к хранилищу с портала (использовали key1 и key 2), но получили те же результаты. Также пытался сгенерировать новый ключ, но это тоже не сработало.

Оценка выражения не удалась. Данный ключ отсутствовал в словаре. \ R \ n в System.Collections.Generic.Dictionary`2.get_Item (ключ TKey), данный ключ отсутствовал в словаре.

Что еще больше запутало стартера azure-apim, такого как я, - это <set-variable name="resourcePath" value="TableName()" />, что делает TableName ()?


person max3d    schedule 06.12.2020    source источник


Ответы (2)


Спасибо всем, кто пытался помочь: Антону и Дорис.

Операция, которая завершилась ошибкой, была этим блоком:

<set-variable name="StringToSign" value="@{
            return string.Format(
            "GET\n\n\n\n\n{0}\n\n\n\n\n\n\n{1}\n{2}\n{3}",
            (string)context.Variables["Content-Type"],
            (string)context.Variables["x-ms-date"],
            (string)context.Variables["x-ms-version"],
            (string)context.Variables["CanonicalizedResource"]);
        }" />

Но в начале примера, когда были заданы контекстные переменные, отсутствовала x-ms-версия. Я добавил операцию <set-variable name="x-ms-version" value="2020-02-10" />, и сейчас создается SAS.

Может быть, это поможет кому-то еще, кто захочет использовать лазурь :)

person max3d    schedule 07.12.2020
comment
так что TableName() это действительно работает и его некоторая недокументированная встроенная функция? (Зависит от APIM) - person Anton Komyshan; 07.12.2020
comment
Извините @ max3d, я ищу везде, но не нашел описания функции TableName(). Не могли бы вы обновить способ установки переменной resourcePath и принять свой ответ, чтобы другие могли сослаться на него? - person Doris Lv; 08.12.2020
comment
Такое ощущение, что TableName () - всего лишь опечатка - я не видел, чтобы она оценивалась как выражение или вызов. Я заменил его на имя контейнера, как предложила Дорис: <set-variable name="resourcePath" value="containername" /> И в rewrite-uri имелась ссылка на эту переменную: <rewrite-uri template="@{return (string)context.Variables["resourcePath"];}" /> В результате обращение к бэкэнду было правильно сформировано: storageaccount.blob.core.windows.net/containername Однако подпись недействительна, но создается. Это требует немного большего расследования - person max3d; 08.12.2020

В этом примере создается маркер SAS для таблицы в учетной записи хранения Azure. Вы можете изменить его на ресурсы, к которым хотите получить доступ, например:

<set-variable name="resourcePath" value="containername/blobname" />

Не забудьте также изменить блок rewrite-uri.

person Doris Lv    schedule 07.12.2020
comment
Вы знали, что такое TableName()? Если управление сохранит политику управления API с помощью этого кода, это будет выглядеть TableName() как некоторая встроенная функция .. idk - person Anton Komyshan; 07.12.2020
comment
Спасибо за ответы. Да, я пытался использовать его для Blob. Должно ли значение имени контейнера быть таким, как вы описали - только имя контейнера или также включать домен верхнего уровня (.blob.core.windows.net)? В любом случае, я повторю ваш пример, Дорис Львов, и обновлю пост - person max3d; 07.12.2020