2017-12-18 6 views
0

Azure鍵保管庫から秘密にアクセスする際に問題があります。私は問題が私は十分にその用語を理解していないと思うので、私は様々なAPI呼び出しに供給している引数が間違っています。デスクトップコンソールアプリケーションからAzure Key Vaultにアクセスできない

protected async Task<string> GetCommunityKeyAsync(UserConfiguration user) 
    { 
     var client = new KeyVaultClient( 
      new KeyVaultClient.AuthenticationCallback(GetAccessTokenAsync), 
      new HttpClient()); 

     // user.VaultUrl is the address of my key vault 
     // e.g., https://previously-created-vault.vault.azure.net 
     var secret = await client.GetSecretAsync(user.VaultUrl, "key-to-vault-created-in-azure-portal"); 

     return secret.Value; 
    } 

    private async Task<string> GetAccessTokenAsync(string authority, string resource, string scope) 
    { 
     var context = new AuthenticationContext(authority, TokenCache.DefaultShared); 

     // this line throws a "cannot identify user exception; see 
     // below for details 
     var result = 
      await context.AcquireTokenAsync(resource, "id-of-app-registered-via-azure-portal", new UserCredential()); 

     return result.AccessToken; 
    } 

ここでスローされます例外である:ここで

は、私が使用している基本的なコードです

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalException
HRESULT = 0x80131500メッセージ= unknown_user:ログに記録されたログを特定できませんでした。ユーザーのソース= Microsoft.IdentityModel.Clients.ActiveDirectory
StackTrace: Microsoft.Identi Microsoft.IdentityModelで System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)でSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.ThrowでtyModel.Clients.ActiveDirectory.AcquireTokenNonInteractiveHandler.d__4.MoveNext() ()
。 Microsoft.IdentityModel.Clientsで System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)でSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.ThrowでClients.ActiveDirectory.AcquireTokenHandlerBase.d__57.MoveNext() ()
。 ActiveDirectory.AuthenticationContext.d__37.MoveNext() Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContextIntegratedAuthExtensions.d__0.MoveNextでSystem.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotificationでSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
(タスク タスク)() は0でSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() at NextDoorScanner.ScannerJob.<GetAccessTokenAsync>d__21.MoveNext() in C:\Programming\CommunityScanner\CommunityScanner\ScannerJob.cs:line 197 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResultで System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)で
() でマイクロソフト。 Azure.KeyVault.KeyVaultCredential.d__9.MoveNext() System.Runtime.CompilerServices.ConfiguredTaskAwaitable 1.ConfiguredTaskAwaiter.GetResult() at Microsoft.Azure.KeyVault.KeyVaultCredential.<ProcessHttpRequestAsync>d__10.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Azure.KeyVault.KeyVaultClient.<GetSecretWithHttpMessagesAsync>d__65.MoveNext() at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult(AT System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)でSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throwで()
) で Microsoft.Azure.KeyVault.KeyVaultClientExtensions.d__11.MoveNext()System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throwで ()System.Runtimeで System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)で
。 CompilerServices.TaskAwaiter 1.GetResult() at NextDoorScanner.ScannerJob.<GetCommunityKeyAsync>d__20.MoveNext() in C:\Programming\CommunityScanner\CommunityScanner\ScannerJob.cs:line 188 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter 1.GetResult() CでNextDoorScanner.NextDoorScannerJob.d__4.MoveNext()で :\プログラミング\ CommunityScanner \ CommunityScanner \ NextDoorScannerJob.cs:ライン System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()で 46で System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(タスク タスク)System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at NextDoorScanner.Program。メイン(文字列[] args)を Cで:\プログラミング\ CommunityScanner \ CommunityScanner \ Program.csを:ライン

22 Iやった、私はPowerShellを経由して、Azureの利用者としての私のデスクトップを登録関与思ったいくつかの設定:

Login-AzureRmAccount 
// as I recall, this next line complained about the app ID already being defined 
New-AzureRmADServicePrincipal -ApplicationId 'id-of-app-previously-defined-via-azure-portal' 
Set-AzureRmKeyVaultAccessPolicy -VaultName 'vault-name' -ServicePrincipalName id-of-app-previously-defined-via-azure-portal -PermissionsToSecrets Get 

I)はGetSecretAsync(へボールトキーを提供することになってるかどうかは不明でよ。私は、新しく作成したUserCredentialをAcquireTokenAsync()に渡す以外の何かをやろうとしているのだろうかと思います。最後に、オンラインの参考文献を参照して、重要な格納域で使用する格納域アカウントを作成しましたが、格納域アカウントを使用している格納域は作成しませんでした。そして、私はコード内のストレージアカウントを特定していません。

ヘルプ、またはコンソールデスクトップアプリケーションから重要なボールトにアクセスする本当に良い例への参照をいただければ幸いです。

答えて

1

ヘルプ、またはコンソールデスクトップアプリケーションからキーボルトにアクセスしている本当に良い例への参照をいただければ幸いです。

Azure Directory Appをレジストリした後、assign role to applicationが必要です。 Azure Key Vaultを運用する場合は、Key Vaultの操作を許可する必要があります。キーボルトのリソースはhttps://vault.azure.netです。また別のSO threadから詳細情報を取得することもできます。

デモコード:私は最終的に動作するように物事を取得する方法を考え出した後、トムが提供するものに加えて

static string appId = "application Id"; 
static string tenantId = "tenant id"; 
static string uri = "http://localhost:13526"; //redirect uri 
static void Main(string[] args) 
{ 
    var kv = new KeyVaultClient(GetAccessToken); 
    var scret = kv.GetSecretAsync("https://xxxx.vault.azure.net", "xxxx").GetAwaiter().GetResult(); 
} 

public static async Task<string> GetAccessToken(string azureTenantId,string clientId,string redirectUri) 
{ 
     var context = new AuthenticationContext("https://login.windows.net/" + tenantId); 
     var tokenResult = await context.AcquireTokenAsync("https://vault.azure.net", appId, new Uri(uri), new PlatformParameters(PromptBehavior.SelectAccount)); 
     return tokenResult.AccessToken; 
    } 
+0

Thanx、Tom。フィードバックとアイデアだけでなく、別のSOスレッドへのリンクも提供していただき、ありがとうございます。 –

関連する問題