Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 为具有身份验证的应用程序服务部署ARM模板时自动创建应用程序服务标识_Azure_Azure Web App Service_Arm Template - Fatal编程技术网

Azure 为具有身份验证的应用程序服务部署ARM模板时自动创建应用程序服务标识

Azure 为具有身份验证的应用程序服务部署ARM模板时自动创建应用程序服务标识,azure,azure-web-app-service,arm-template,Azure,Azure Web App Service,Arm Template,我已经为Azure应用程序服务身份验证挣扎了一段时间。我正在运行CI/CD管道,希望使用ARM模板配置应用程序服务身份验证。请参见此处(我的模板的一部分): { "name": "[parameters('apiAppName')]", "type": "Microsoft.Web/sites", "location": "[resourceGroup().location]", "apiVersion": "2015-08-01", "dependsOn": [ "

我已经为Azure应用程序服务身份验证挣扎了一段时间。我正在运行CI/CD管道,希望使用ARM模板配置应用程序服务身份验证。请参见此处(我的模板的一部分):

{
  "name": "[parameters('apiAppName')]",
  "type": "Microsoft.Web/sites",
  "location": "[resourceGroup().location]",
  "apiVersion": "2015-08-01",
  "dependsOn": [
    "[resourceId('Microsoft.Web/serverfarms', parameters('apiHostingPlanName'))]"
  ],
  "properties": {
    "name": "[parameters('apiAppName')]",
    "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('apiHostingPlanName'))]",
    "siteConfig": {
      "siteAuthEnabled": true,
      "siteAuthSettings": {
        "unauthenticatedClientAction": 0,
        "defaultProvider": 0,
        "tokenStoreEnabled": true,
        "clientAffinityEnabled": false 
      } 
    }
  }
}
在部署时,它仍然会将所有身份验证提供程序显示为未配置

要配置AAD提供程序,我只提出了两种解决方案:

  • 使用门户对其进行配置。不是我想要的,手动点击不能与连续交付相结合
  • 在我的发布管道中使用Azure Powershell创建(如果不存在)具有客户端机密和clientid的应用程序注册,并在ARM模板中指定

我想知道,有没有办法让我自动创建所需的应用程序标识?可能使用/与托管服务标识结合使用

可能有点晚,但如果您还没有找到答案

资源[]

        "apiVersion": "2018-02-01",
        "type": "Microsoft.Web/sites",
        "kind": "app",
        "name": "[variables('webAppName')]",
        "location": "[parameters('location')]",
        "identity": {
            "type": "SystemAssigned"
        },
并将servicePrincpalId包含在输出中,以便可以重新使用它来设置对所需资源的访问权限keyvault;斑点;sql等

    "outputs": {
        "appServicePrincipalId": {
            "type": "string",
            "value": "[reference(concat(resourceId('Microsoft.Web/sites/', variables('webAppName')),'/providers/Microsoft.ManagedIdentity/Identities/default'), '2015-08-31-PREVIEW').principalId]"
        },

也许像。。。在现有Microsoft.Web/sites部分下添加资源数组

{
    "name": "authsettings",
    "type": "config",
    "apiVersion": "2015-08-01",
    "dependsOn": [ 
       "[resourceId('Microsoft.Web/sites/', variables('webAppName'))]" 
    ],
    "properties": {
        "enabled": true,
        "httpApiPrefixPath": null,
        "unauthenticatedClientAction": "RedirectToLoginPage",
        "tokenStoreEnabled": true,
        "allowedExternalRedirectUrls": null,
        "defaultProvider": "AzureActiveDirectory",
        "clientId": "[variables('clientId')]",
        "clientSecret": "[variables('clientSecret')]",
        "issuer": "[concat('https://sts.windows.net/', subscription().tenantId, '/')]",
        "allowedAudiences": [
        "[concat('https://', variables('fqdn'), '/.auth/login/aad/callback')]"
        ],
        "additionalLoginParams": null,
        "isAadAutoProvisioned": false
    }
  }

我测试了不同的选项,使它只使用Arm模板来部署webapp并直接启用身份验证,但它似乎不起作用。我使用正确的CI/CD方式的方法是使用Azure CLI命令添加一个额外的任务,以启用身份验证并分配应用程序clientId。 我的任务:

- task: RalphJansen.Azure-AD-Application-Management.New-Azure-AD-Application.New-Azure-AD-Application@2
  displayName: 'New Azure AD Application'
  inputs:
   azureSubscription: 'SubscriptionID'
   name: '$(apiName)'
   signOnUrl: 'https://$(apiName).azurewebsites.net'

- task: AzureResourceGroupDeployment@2
    displayName: 'Create WebApp'
    inputs:
     azureSubscription: 'SubscriptionID'
     resourceGroupName: '$(ResourceGroup)'
     location: 'Canada East'
     csmFile: '$(System.DefaultWorkingDirectory)/_build/drop/azuredeploy.json'
     overrideParameters: '-apiName $(apiName) -appServicePlanName $(appServicePlanName)'

- task: AzureCLI@1
  displayName: 'Update WebApp to do Oauth authentification & enable Oauth2ImplicitFlow'
  inputs:
    azureSubscription: 'SubscriptionID'
    scriptLocation: inlineScript
    inlineScript: |
     call az webapp auth update --name $(apiName) --aad-client-id $(out.ApplicationId) --action LoginWithAzureActiveDirectory --enabled true --resource-group "$(ResourceGroup)" --aad-token-issuer-url "https://sts.windows.net/your AAD ID here" --token-store true
     call az ad app update --id $(out.ApplicationId) --oauth2-allow-implicit-flow true

这确实会向应用程序添加一个标识,并将生成的主体id返回给调用者。但是,我不认为这有助于在应用程序本身上启用身份验证?我的意思是,应用程序的用户必须登录?对不起,我误解了问题的最后一部分。AFAIK仍然需要创建一个AD应用程序,而不是重复使用系统管理的标识,尽管我可能需要在限制较少的租户中进行测试。请参阅resources.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resource group}/providers/Microsoft.Web/sites/{site name}/config/authsettings/list以了解设置过程中的一些提示。我认为,此模板很可能用于设置正确的提供程序。然而,这里我们又回到了必须指定clientSecret的位置,这是应用程序服务无法获得的。我认为结论仍然是,如果不首先为ADD提供一个标识,那么这是不可能的。