azure - 无法使用 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 show
说unauthenticatedClientAction
设置为RedirectToLoginpage
。
az resource show
说unauthenticatedClientAction
设置为null
。
当我执行上述技巧时:
az auth show
说unauthenticatedClientAction
设置为AllowAnonymous
。
az resource show
说unauthenticatedClientAction
设置为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
什么?
任何帮助将不胜感激!
解决方案
首先,回答您的问题,设置unauthenticatedClientAction
为AllowAnonymous
,只需使用
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 专家:-))
推荐阅读
- firebase - firebase,颤振错误“无法解析所有配置文件”
- reactjs - 在 sagas 中的地图内获取数据
- database - 如何在多对多关系中创建部分依赖关系?
- python - 如何将图像重塑为 NxNx3 块并分别在其通道上执行操作
- python - Selenium 在使用 Python 时无法单击“获取数据”按钮
- node.js - Symfony 5.2 + Webpack Encore:npm 运行显示错误“意外令牌”
- maven - 通过 maven-invoker-plugin 运行构建后脚本
- repeat - 如何复制粘贴很多很快(img01,img02,img03,...)不同的html?
- maven - 有没有办法根据构建期间创建的文件激活配置文件?
- node.js - 在 nest.js 中设置请求标头大小限制