首页 > 解决方案 > Azure C# KeyVaultErrorException:操作返回了无效的状态代码“禁止”

问题描述

我正在编写一个程序,试图OneAuthZAuthentication通过访问 KeyVault 来访问 Azure 表存储的机密 ()。我正在遵循本教程中列出的步骤:https ://jeanpaul.cloud/2019/12/07/azure-key-vault-access-from-c/

我创建了一个名为ITALocalBuildSecrets在此处输入图像描述

使用以下DNS 名称https ://italocalbuildsecrets.vault.azure.net/ 在此处输入图像描述

我还有另一个名为 ( ) 的秘密OneAuthZAuthentication在此处输入图像描述

我在活动目录中创建 了 一个应用 OneAuthZUserApplication程序 (正在注册的访问策略: 在此处输入图像描述OneAuthZUserApplication在此处输入图像描述OneAuthZUserApplication在此处输入图像描述在此处输入图像描述

下面是我正在运行的代码:

    // Retrieves the access token necessary to gain authentication into the key vault
    [FunctionName("GetToken")]
    public static async System.Threading.Tasks.Task<string> GetToken(string authority, string resource, string scope)
    { 
        var clientId = "5cf497b0-3467-456a-a03a-4d4414b*****"; // Stars are for security reasons :D
        var clientSecret = "468.26i5Wc.nQ6TYL-eOvBmcto.t.*****"; // Stars are for security reasons
        ClientCredential credential = new ClientCredential(clientId, clientSecret);
        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
        var result = await context.AcquireTokenAsync(resource, credential);
        return result.AccessToken;
    }

    // Retrieves the access key vault accountKey (needed to authenticate access into the role assignments table)
    public static string GetVaultValue()
    {
        KeyVaultClient client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken));
        var vaultAddress = "https://italocalbuildsecrets.vault.azure.net/";
        var secretName = "OneAuthZAuthentication";
        var secret = client.GetSecretAsync(vaultAddress, secretName).GetAwaiter().GetResult();
        return secret.Value;
    }

    [FunctionName("Function1")]
    // Function that reads a small portion of the role assignments table (OneAuthZRoleAssignments) every 
    // configurable number of times
    public static async System.Threading.Tasks.Task RunAsync([TimerTrigger("%TimerTriggerPeriod%")]TimerInfo myTimer, ILogger log)
    {
        Console.WriteLine($"Secret Value from Vault is: {GetVaultValue()}");
    }

我收到以下错误:

Function1. Microsoft.Azure.KeyVault: Operation returned an invalid status code 'Forbidden'.   

考虑到我将OneAuthZUserApplication应用程序授权给密钥保管库,这看起来确实很奇怪。

标签: c#azureazure-keyvault

解决方案


我按照您的步骤并使用您的代码进行测试,并且一切正常。

添加后请去确认Access policy,记得点击保存按钮。

在此处输入图像描述


推荐阅读