无法使用Az模块或Az / CLI设置unauthenticatedClientAction

时间:2020-04-28 14:46:54

标签: azure powershell azure-active-directory

我设计了一个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
}

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

enter image description here

我保存设置,启用并再次保存所有内容。

因此,我再次开始并启动了脚本。我已经检查了资源。

az auth showunauthenticatedClientAction设置为RedirectToLoginpage

az resource showunauthenticatedClientAction设置为null

当我执行上述技巧时:

az auth showunauthenticatedClientAction设置为AllowAnonymous

az resource showunauthenticatedClientAction设置为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的正确方法是什么?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

首先,回答您的问题,将AllowAnonymous设置为az webapp auth update --name <functionapp-name> --resource-group <group-name> --action AllowAnonymous ,只需使用

unauthenticatedClientAction

enter image description here


实际上,当您在门户网站中完成技巧时,它将改变

enter image description here

enter image description here

这是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的专家:-))

有关更多详细信息,您可以选中此blog和此post