.net 核心密钥保管库 link 在本地环境中因访问被禁止而失败

.net core key vault link fails with Access Forbidden on local environment

我 运行 以下功能是我的 .net 核心 Web 应用程序的 Main 方法的一部分

private static void LinkKeyVault(IConfigurationBuilder config, string keyVaultEndpoint)
        {
            if (!string.IsNullOrEmpty(keyVaultEndpoint))
            {
                var azureServiceTokenProvider = new AzureServiceTokenProvider();
                var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
                config.AddAzureKeyVault(keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
            }
        }

当我在我的本地开发机器上 运行 此代码时,我收到以下错误“操作返回无效状态代码 'Forbidden'”。当此代码在应用服务用户分配的托管标识下在 Azure 中运行时,一切正常。在我的本地环境中,我使用我的 Azure AD 用户登录,该用户使用 Key Vault 访问策略获得了访问权限,权限与用户分配的托管标识相同。

dfrds-dev-web-identity 是用户分配的托管标识,DFRDDevelopers 是我的 Azure AD 帐户所属的组。

应该可以,请确保用户帐户所在的组是Security组,而不是Microsoft 365组,这里只支持Security组功能。

参考 - https://docs.microsoft.com/en-us/azure/key-vault/general/secure-your-key-vault#data-plane-and-access-policies

To grant data plane access to several users, create an Azure AD security group and add users to that group.

此外,如果您想使用 Visual Studio 进行身份验证,请确保您使用正确的帐户登录,并尝试在代码中使用 RunAs=Developer; DeveloperTool=VisualStudio 以确保它使用 Visual Studio 授权。

var azureServiceTokenProvider = new AzureServiceTokenProvider(RunAs=Developer; DeveloperTool=VisualStudio);