Powershell 是否可以为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资源管理器命令可以做到这一点 有人知道如何自动配置应用程序服务身份验证,特别是

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"