首页 > 解决方案 > 无法使用 Az 模块或 Az/CLI 设置 unauthenticatedClientAction

问题描述

我设计了一个 PowerShell 脚本,它能够正确配置函数应用程序的各种设置(包括 CORS,例如)。Function App 可以工作,并且可以从 Api Manegement 服务调用。

当需要配置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
}

第一个奇怪的事情是,如果我禁用身份验证/授权,

在此处输入图像描述

我保存设置,启用并再次保存一切开始工作。

所以我重新开始并启动了脚本。我检查了资源。

az auth showunauthenticatedClientAction设置为RedirectToLoginpage

az resource showunauthenticatedClientAction设置为null

当我执行上述技巧时:

az auth showunauthenticatedClientAction设置为AllowAnonymous

az resource showunauthenticatedClientAction设置为null

所以我认为这是使 Function App 正常工作的重要区别(或者更好的是,这是正确配置它的方法)。

由于我已成功将此方法用于其他设置,因此我尝试使用 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在任何 Function App 模板中都看不到任何内容。

unauthenticatedClientAction设置为的正确方法是AllowAnonymous什么?

任何帮助将不胜感激!

标签: azurepowershellazure-active-directory

解决方案


首先,回答您的问题,设置unauthenticatedClientActionAllowAnonymous,只需使用

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

在此处输入图像描述


实际上,当您在门户中执行此操作时,它会改变

在此处输入图像描述

在此处输入图像描述

这是unauthenticatedClientAction设置。

那么问题来了,我不确定你是否想用 Azure AD 保护你的 Azure 功能。因为当您设置unauthenticatedClientAction为时AllowAnonymous,您的函数将允许匿名请求,Azure AD 身份验证不会生效。

当需要配置 Azure AD 时,我使用 Az/CLI 来准确复制我使用 Portal UI 所做的事情(并且我手动设置的内容非常有效)。但它停止工作,APIM 返回 HTTP 状态代码 401(未经授权)。

是的,401错误代表Azure AD auth toke effect,如果启用Azure AD auth(set Log in with Azure Active Directory),则需要为您的客户端/用户获取访问令牌,然后使用令牌访问该功能。(不知道如何在 APIM 中实现它,我不是 APIM 专家:-))

有关更多详细信息,您可以查看此博客和此帖子


推荐阅读