9

ドメインに参加している独自の資格情報を使用して Azure KeyVault にアクセスするための簡単なアプリケーションを作成しようとしています。資格情報の部分なのか、KeyVault へのアクセス方法なのかはわかりませんが、「無効な URI: URI の形式を特定できませんでした」という例外が引き続き発生します。Azure PowerShell コマンドレットを使用して KeyVault にアクセスできますが、C# を使用することはできません。

ここに私が持っているコードがあります:

class Program
{
    const string ClientId = "MY AAD CLIENT ID";

    static void Main(string[] args)
    {
        Console.WriteLine("Hello, KeyVault!");
        var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetAccessToken));
        var secret = client.GetSecretAsync("vaultName", "secretName").Result; // Throws Invalid URI: The format of the URI could not be determined
        Console.WriteLine(secret.Value);
        Console.ReadLine();
    }

    private static async Task<string> GetAccessToken(string authority, string resource, string scope)
    {
        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
        var authResult = await context.AcquireTokenAsync(resource, ClientId, new UserCredential());
        return authResult.AccessToken;
    }
}

何が原因でしょうか? インターネットを精査しましたが、この方法で KeyVault にアクセスする方法を示すサンプル コードは見つかりませんでした。

4

3 に答える 3

12

@varun-puranik が言ったようにvaultBaseUrl、vault 名ではなく を指定する必要はありません。

Azure Active Directory クライアント ID を指定せずにAzure Keyvaultに接続できる新しい nuget パッケージがあります。このアプローチは、マネージド ID
を使用している場合に機能します

Microsoft.Azure.KeyVault nuget パッケージもインストールする必要があります。

using Microsoft.Azure.KeyVault;
using Microsoft.Azure.Services.AppAuthentication;

...

var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
     new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = await keyVaultClient.GetSecretAsync(
    "https://{{my-vault-name}}.vault.azure.net/", "{{my-secret}}");
于 2018-03-29T04:25:34.423 に答える
5

VaultName は、Vault の名前だけでなく、KeyVault への URL である必要があります。たとえば、KeyVault の名前が TestKeyVault の場合、次のコードを使用する必要があります -

var secret = client.GetSecretAsync("https://testkeyvault.vault.azure.net:443", "secretName").Result;

コードの残りの部分は正常に見えます。

于 2016-06-12T19:40:09.753 に答える