You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用Azure函数应用托管身份替代密钥配置Entra认证?

能否用托管身份替代客户端密钥配置Azure函数应用的Entra ID身份验证?

我参考微软文档配置了Azure函数应用,要求用户通过Entra ID完成身份验证,目前运行正常。但配置步骤需要创建客户端密钥并存储在函数应用中,请问能否改用该函数应用的托管身份?

原因:除了安全因素外,我通过Bicep和azd自动化完成函数应用的全流程创建,而在Bicep中将密钥作为输出返回是非常糟糕的做法。

补充:我的azd函数应用项目内容来自GitHub仓库的azure-function-app目录。


可以使用系统分配或用户分配的托管身份替代客户端密钥来配置Azure函数应用的Entra ID身份验证,具体实现步骤如下:

1. 启用函数应用的托管身份

  • 系统分配身份:直接在函数应用的「身份」面板中启用,Entra ID会自动创建对应的服务主体。
  • 用户分配身份:先创建用户分配的托管身份资源,再将其关联到目标函数应用。

2. 配置Entra ID身份验证提供程序

在函数应用的「身份验证」设置中,更新Entra ID提供程序的配置:

  • 选择「使用托管身份」选项,替代原有的客户端密钥配置。
  • 确保托管身份对应的服务主体已配置好与原客户端应用一致的API权限和重定向URI。

3. Bicep自动化配置示例

在Bicep模板中,可直接启用系统分配身份,并在身份验证配置中引用该身份:

resource functionApp 'Microsoft.Web/sites@2023-01-01' = {
  name: functionAppName
  location: location
  properties: {
    // 函数应用基础配置(如运行时、存储账户关联等)
  }
  identity: {
    type: 'SystemAssigned'
  }
}

resource authConfig 'Microsoft.Web/sites/config@2023-01-01' = {
  parent: functionApp
  name: 'authsettingsV2'
  properties: {
    enabled: true
    identityProviders: {
      azureActiveDirectory: {
        enabled: true
        login: {
          loginParameters: []
        }
        registration: {
          openIdIssuer: 'https://login.microsoftonline.com/${tenantId}/v2.0'
          clientId: functionApp.identity.principalId
          clientSecretSettingName: '' // 留空以使用托管身份
        }
        validation: {
          allowedAudiences: [
            'https://${functionAppName}.azurewebsites.net'
          ]
        }
      }
    }
  }
}

4. 关键注意事项

  • 确保托管身份拥有函数应用所需的资源访问权限(若需调用其他Azure服务)。
  • 保留原配置中的重定向URI,保证用户登录流程正常执行。
  • 完成配置后,务必测试身份验证流程,确认用户可正常登录并访问函数应用。

内容的提问来源于stack exchange,提问作者Yvand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:46:07