我设计了一个PowerShell脚本,它能够正确地配置函数应用程序(包括CORS )的各种设置。函数应用程序工作,可以从Api管理服务调用。
当需要配置Azure AD时,我使用了Az/CLI来准确地复制我使用Portal 所做的事情(以及手动设置的完全工作)。但是它停止工作,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。
因此,我认为这是使函数应用程序正常工作的重要区别(或者更好地说,这是正确配置它的方法)。
由于我在其他设置中成功地使用了此方法,所以我尝试使用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的正确方法是什么
任何帮助都是非常感谢的!
发布于 2020-04-29 09:16:23
首先,回答您的问题,要将unauthenticatedClientAction设置为AllowAnonymous,只需使用
az webapp auth update --name <functionapp-name> --resource-group <group-name> --action AllowAnonymous

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

至

这是unauthenticatedClientAction设置。
那么问题就来了,我不确定你是否想用azure AD来保护你的天蓝色功能。因为当您将unauthenticatedClientAction设置为AllowAnonymous时,您的函数将允许匿名请求,因此Azure不会生效。
当需要配置Azure AD时,我使用了Az/CLI来准确地复制我使用Portal所做的事情(以及手动设置的完全工作)。但是它停止工作,APIM返回HTTP状态代码401 (未经授权)。
是的,401错误表示Azure AD auth效果,如果您启用Azure auth(设置为Log in with Azure Active Directory),则需要为客户端/用户获取访问令牌,然后使用令牌访问函数。(不知道如何在APIM中实现它,我不是APIM方面的专家:-)
https://stackoverflow.com/questions/61483051
复制相似问题