Невозможно установить unauthenticatedClientAction с модулем Az или Az / CLI - PullRequest
0 голосов
/ 28 апреля 2020

Я разработал сценарий PowerShell, который позволяет правильно настраивать различные параметры Функционального приложения (включая, например, CORS). Приложение Function Function работает и может вызываться из службы управления Api.

Когда возникла необходимость настроить Azure AD , я использовал Az / CLI для репликации точно , что я делаю, используя Portal UI (и то, что я установил вручную, отлично работает). Но он перестал работать, APIM возвращает код состояния HTTP 401 (не авторизован).

Часть сценария, которая настраивает Azure AD, выглядит следующим образом:

# $add is a simple class that contains value to be configured
# actually AllowedTokens is always empty
if ($aad) {
    'Setting Function App AAD configuration.' | Write-Verbose
    $allowedTokens = if ($aad.AllowedTokens) { "--aad-allowed-token-audiences $($aad.AllowedTokens -join ' ')"  } else { '' }
    "az webapp auth update --name $name --resource-group $group --enabled $($aad.Enabled.ToString().ToLower())" +
        " --action LoginWithAzureActiveDirectory --aad-client-id $($aad.ClientId) --aad-client-secret $($aad.ClientSecret)" +
        " --token-store true" +
        " --aad-token-issuer-url $($aad.TokenIssuerUrl) $allowedTokens" |
        Invoke-Expression
    'Function App AAD configuration set.' | Write-Verbose
}

Первая странная вещь заключается в том, что если я отключаю аутентификацию / авторизацию,

enter image description here

Сохраняю настройки, включаю и сохраняю снова все начинает работать.

Итак, я снова начал и запустил скрипт. Я изучил ресурс.

az auth show говорит, что unauthenticatedClientAction установлен на RedirectToLoginpage.

az resource show говорит, что unauthenticatedClientAction установлен на null.

Когда я делаю трюк, описанный выше:

az auth show говорит, что unauthenticatedClientAction установлен на AllowAnonymous.

az resource show говорит, что unauthenticatedClientAction установлен на null.

Так что я думаю, что это важное различие для правильной работы приложения функций (или, что лучше, это способ его правильной настройки).

Поскольку я использовал этот метод с успехом для других настроек, я попытался установить это свойство с помощью Az / CLI:

az resource update --name web --resource-group $group --namespace Microsoft.Web --resource-type config `
    --parent "sites/$funcName" --set properties.siteAuthSettings.unauthenticatedClientAction=AllowAnonymous

Возвращенный JSON ответ не показывает, что ничего не изменилось. Проверка ресурса подтверждает это.

Еще одна вещь, когда я экспортирую группу ресурсов, я не вижу unauthenticatedClientAction ни в одном шаблоне приложения функции.

Как правильно установить unauthenticatedClientAction до AllowAnonymous?

Любая помощь будет по достоинству оценена!

1 Ответ

1 голос
/ 29 апреля 2020

Сначала ответьте на свой вопрос, чтобы установить unauthenticatedClientAction на AllowAnonymous, просто используйте

az webapp auth update --name <functionapp-name> --resource-group <group-name> --action AllowAnonymous

enter image description here


На самом деле, когда вы делаете трюк на портале, он изменит

enter image description here

на

enter image description here

Это настройка unauthenticatedClientAction.

Тогда возникает вопрос, я не уверен, хотите ли вы защитить свою функцию azure с помощью Azure AD или нет. Поскольку при установке unauthenticatedClientAction на AllowAnonymous ваша функция разрешит анонимный запрос, аутентификация Azure AD не будет действовать.

Когда возникла необходимость настроить Azure AD Я использовал Az / CLI для точного воспроизведения того, что я делаю с помощью пользовательского интерфейса портала (и то, что я установил вручную, прекрасно работает). Но он перестал работать, APIM возвращает код состояния HTTP 401 (не авторизован).

Да, ошибка 401 представляет собой эффект токена аутентификации Azure AD, если вы включили аутентификацию Azure AD (установлено Log in with Azure Active Directory), вам нужно получить токен доступа для вашего клиента / пользователя, а затем использовать токен для доступа к функции. (Не уверен, как реализовать это в APIM, я не эксперт в APIM: -))

Для более подробной информации, вы можете проверить этот блог и этот пост .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...