Powershell 是否可以为Azure应用程序服务身份验证的配置编写脚本?
Azure应用程序服务在身份验证/授权设置刀片下包含一个交钥匙身份验证解决方案。这允许我为我的应用程序服务web api配置Active Directory身份验证。我有一个设置环境的配置脚本,我想通过ARM模板或Powershell命令自动配置应用程序服务身份验证 我已尝试使用resource.azure.com查看我的站点设置,但无法查看与广告相关的配置。我尝试过搜索ARM模板,但没有成功。我也看不到一个Azure资源管理器命令可以做到这一点Powershell 是否可以为Azure应用程序服务身份验证的配置编写脚本?,powershell,azure,authentication,azure-resource-manager,Powershell,Azure,Authentication,Azure Resource Manager,Azure应用程序服务在身份验证/授权设置刀片下包含一个交钥匙身份验证解决方案。这允许我为我的应用程序服务web api配置Active Directory身份验证。我有一个设置环境的配置脚本,我想通过ARM模板或Powershell命令自动配置应用程序服务身份验证 我已尝试使用resource.azure.com查看我的站点设置,但无法查看与广告相关的配置。我尝试过搜索ARM模板,但没有成功。我也看不到一个Azure资源管理器命令可以做到这一点 有人知道如何自动配置应用程序服务身份验证,特别是
有人知道如何自动配置应用程序服务身份验证,特别是针对广告身份验证吗?我可以自己回答这个问题:这确实可以通过ARM模板编写脚本。(我最初尝试使用
resources.azure.com
,但它没有显示我网站的所有配置信息;注销并再次登录使其正常工作。)解决方案是在Microsoft.Web/sites
资源中为您的Web应用使用类型为config
和名称为Web
的嵌套资源来指定设置,例如:
{
"type": "Microsoft.Web/sites",
...
"resources": [
{
"apiVersion": "2015-04-01",
"name": "web",
"type": "config",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', parameters('someName'))]"
],
"properties": {
"siteAuthEnabled": true,
"siteAuthSettings": {
"enabled": null,
"httpApiPrefixPath": null,
"unauthenticatedClientAction": null,
"tokenStoreEnabled": null,
"allowedExternalRedirectUrls": null,
"defaultProvider": null,
"clientId": "REMOVED",
"clientSecret": null,
"issuer": "https://sts.windows.net/REMOVED/",
"allowedAudiences": null,
"additionalLoginParams": null,
"isAadAutoProvisioned": false,
"aadClientId": "REMOVED",
"openIdIssuer": "https://sts.windows.net/REMOVED/",
"googleClientId": null,
"googleClientSecret": null,
"googleOAuthScopes": null,
"facebookAppId": null,
"facebookAppSecret": null,
"facebookOAuthScopes": null,
"twitterConsumerKey": null,
"twitterConsumerSecret": null,
"microsoftAccountClientId": null,
"microsoftAccountClientSecret": null,
"microsoftAccountOAuthScopes": null
}
}
}
]
}
下面是一种使用直接Powershell命令的方法 首先,您可以使用以下工具查看当前的身份验证设置:
$rgName = "ResourceGroupName"
$resourceType = "Microsoft.Web/sites/config"
$resourceName = "service-name/authsettings"
$resource = Invoke-AzureRmResourceAction -ResourceGroupName $rgName `
-ResourceType $resourceType -ResourceName $resourcename -Action list `
-ApiVersion 2015-08-01 -Force
$resource.Properties
然后,您可以获取这些属性的值并使用它们设置PropertyObject(下面显示的属性与使用服务主体的AAD身份验证相关):
$PropertiesObject=@{
“已启用”=“真”;
“unauthenticatedClientAction”=“0”;
“defaultProvider”=“0”;
“tokenStoreEnabled”=“True”;
“clientId=”;
“发行人”=“https://sts.windows.net//";
“允许的观众”=“{https://.azurewebsites.net}";
“IsadaAutoProvision”=“True”;
“aadClientId”=“”;
“OpenIDisUser”=”https://sts.windows.net//";
}
新AzureRmResource-PropertyObject$PropertiesObject`
-ResourceGroupName$rgName-ResourceType$ResourceType`
-ResourceName$ResourceName-ApiVersion 2015-08-01-强制
我发现在门户中启用身份验证、查看属性、然后使用这些值设置PropertyObject更容易。编辑2020/06:我发现获取此工作的基本示例是不合理的神秘。下面是一个获取WebApp以使用Azure AD进行身份验证的详细方法
参考号:// 步骤1:定义一些基本变量 步骤2-创建Azure Active Directory(AAD)应用程序注册 步骤3-添加广告应用权限 似乎需要具有读取权限的Microsoft Graph API
AADappId=$(az ad app list --display-name "$AADappName" --query [].appId -o tsv);
MSGraphAPI="00000003-0000-0000-c000-000000000000" #UID of Microsoft Graph
Permission="e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope" # ID: Read permission, Type: Scope
az ad app permission add \
--id "$AADappId" \
--api "$MSGraphAPI" --api-permissions "$Permission"
# Appears to be safe to ignore resulting warning:
# "Invoking "az ad app permission grant --id $AADappId --api $MSGraphAPI" is needed to make the change effective"
步骤4-Web:启用身份验证
显示幂等(在每次部署期间可以安全执行)
先前的答复: 这现在是Azure CLI,可在
az webapp auth
下使用
{EDIT:Snipped文档大部分都是无用的-可以在这里看到:}这对我来说是一个很有前途的方法(作为PS中唯一的一种方法?)。但我收到“消息”:“发生了错误”。启用调试($DebugPreference=“Continue”)后,我从API中看到InternalServerError。我当前的解决方法是使用@PotatoFarmer answer并使用CLI,不幸的是……这对我很有效,但我找不到协作文档。
RSGROUP="MyResourceGroup"
webappname="MyWebSite"
WebAppFDQN=$(az webapp show --name "$webappname" -g "$RSGROUP" --query "defaultHostName" --out tsv);
prodURL="https://myapp.customdomainblah.com";
AADsuffix="/.auth/login/aad/callback" # AD Online is hardcoded to redirect to this path!!
urls="https://${WebAppFDQN}${AADsuffix} ${prodURL}${AADsuffix}";
AADappName="$webappname"
az ad app create \
--display-name "$AADappName" \
--homepage="https://${WebAppFDQN}" \
--reply-urls $urls \
--oauth2-allow-implicit-flow true
AADappId=$(az ad app list --display-name "$AADappName" --query [].appId -o tsv);
MSGraphAPI="00000003-0000-0000-c000-000000000000" #UID of Microsoft Graph
Permission="e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope" # ID: Read permission, Type: Scope
az ad app permission add \
--id "$AADappId" \
--api "$MSGraphAPI" --api-permissions "$Permission"
# Appears to be safe to ignore resulting warning:
# "Invoking "az ad app permission grant --id $AADappId --api $MSGraphAPI" is needed to make the change effective"
az webapp auth update \
-g "$RSGROUP" -n "$webappname" --enabled true \
--action LoginWithAzureActiveDirectory \
--aad-client-id "$AADappId"