我设计了一个PowerShell脚本,该脚本能够正确配置功能应用的各种设置(例如,包括CORS)。 Function App可以运行,并且可以从Api Manegement服务中调用。
当需要配置 Azure AD 时,我已经使用 Az / CLI 复制精确地我使用门户网站用户界面(以及我手动设置的内容都可以正常使用)。 但是它停止工作,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正常运行的重要区别(或者更好的是,正确配置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显示未更改。检查资源即可确认。
还有一件事,当我导出资源组时,在任何Function App模板中都看不到任何unauthenticatedClientAction
。
将unauthenticatedClientAction
设置为AllowAnonymous
的正确方法是什么?
任何帮助将不胜感激!
答案 0 :(得分:1)
首先,回答您的问题,将AllowAnonymous
设置为az webapp auth update --name <functionapp-name> --resource-group <group-name> --action AllowAnonymous
,只需使用
unauthenticatedClientAction
实际上,当您在门户网站中完成技巧时,它将改变
到
这是unauthenticatedClientAction
设置。
然后问题来了,我不确定是否要使用Azure AD保护Azure功能。因为当您将AllowAnonymous
设置为Log in with Azure Active Directory
时,您的函数将允许匿名请求,因此Azure AD身份验证将不会生效。
当需要配置Azure AD时,我已使用Az / CLI完全复制了我使用Portal UI所做的工作(以及我手动设置的工作效果很好)。但是它停止工作,APIM返回HTTP状态代码401(未授权)。
是的,401错误代表Azure AD身份验证令牌的效果,如果启用Azure AD身份验证(设置with r_cte as (
select dateadd(day, 1, eomonth('2020-04-29', -1)) as start_dt, dateadd(day, 5, convert(date, EOMONTH('2020-04-29', -1))) as first_wk
union all
select dateadd(day, 1, start_dt), first_wk
from r_cte
where start_dt < first_wk
)
select start_dt as first_week
from r_cte;
),则需要获取客户端/用户的访问令牌,然后使用该令牌来访问该功能。 (不知道如何在APIM中实现它,我不是APIM的专家:-))