Azure Function获取OAuth 2.0令牌运行失败及配置问题咨询
问题1解答:依赖安装与前置配置
- 编译报错的核心原因是缺少对应的NuGet依赖包,不需要在Azure租户层面安装,只需要在当前Function App的函数目录下新增依赖配置即可:
你在Portal的「Code + Test」页面,点击上方的文件下拉框,选择「新建文件」,命名为function.proj,粘贴如下内容:
保存后等待Function运行时自动还原依赖包。<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Azure.Identity" Version="1.5.0" /> <PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.2.0" /> <PackageReference Include="Google.Apis.Auth" Version="1.57.0" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.12" /> </ItemGroup> </Project> - 其他必须完成的前置配置:
- 进入Function App的「身份验证」菜单,开启系统分配的托管身份,保存后复制生成的服务主体ID
- 进入你要使用的Azure Key Vault的「访问策略」菜单,新增访问策略,给上述服务主体授予**密钥获取(Get)**权限,保存并发布访问策略
- 进入Function App的「配置」-「应用程序设置」,新增名为
KEY_VAULT_URL的配置项,值为你的Key Vault的访问URI(格式为https://<你的Key Vault名称>.vault.azure.net/),保存配置
问题2解答:密钥库识别与代码占位符修正
- 函数识别密钥库的逻辑:
代码中Environment.GetEnvironmentVariable("KEY_VAULT_URL")会读取你刚才在Function应用设置中配置的Key Vault地址,初始化SecretClient时传入的ManagedIdentityCredential()会自动调用Function的系统托管身份凭证访问Key Vault,无需额外配置访问密钥。 - 代码存在一处明显错误需要修正:
原代码中string keyJson = kvClient.GetSecret("KEY_VAULT_URL").Value.Value;写法错误,GetSecret的入参应该是你提前存入Key Vault中的Google服务账号JSON密钥对应的密钥名称,请将KEY_VAULT_URL替换为你自己在Key Vault中创建的密钥名称。 - 其他注意:如果你直接将类库格式的C#代码粘贴到Portal的.csx脚本中,需要删除外层的
namespace和class定义,只保留using指令和Run方法即可适配脚本运行环境。
内容的提问来源于stack exchange,提问作者Dirk Sachse
相关产品推荐
相关产品推荐

