Verwenden von Adal für den Zugriff auf Azure KeyVault im Namen eines Benutzers

Das Folgende befindet sich in einer Konsolenanwendung und in der Client-ID. RedirectUri stammt aus der erstellten nativen Anwendung in Azure Active Directory.

var authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}","common"),new FileCache());
var token = authContext.AcquireToken("https://management.core.windows.net/", ClientID, RedirectUri, PromptBehavior.Auto);

Ich habe jetzt das Token für das Gespräch mit der Management-API.

 using (var client = new KeyVaultManagementClient(new TokenCloudCredentials(SubscriptionId, token.AccessToken)))
 {
     var a = client.Vaults.List(resourceGroup, 10);
     foreach(var vault in a.Vaults)
     {
           var vaultInfo = client.Vaults.Get(resourceGroup, vault.Name);
           Console.WriteLine(JsonConvert.SerializeObject(vaultInfo.Vault, Formatting.Indented));
           //Verifying that the AccessPolicies contains my object id (pasting idtoken into jwt.io and compare with oid claim) Success.

           // Now its time to talk with keyvault
           var keyvault = new KeyVaultClient(GetAccessTokenAsync);
           var secrets = keyvault.GetSecretsAsync(vaultInfo.Vault.Properties.VaultUri).GetAwaiter().GetResult();

     }

 }


 private static Task<string> GetAccessTokenAsync(string authority, string resource, string scope)
 {
         var context = new AuthenticationContext(authority, new FileCache());
        var result = context.AcquireToken(resource, new ClientCredential(AppClientId,AppKey));

        return Task.FromResult(result.AccessToken);

 }

Above funktioniert, ich muss jedoch auf meinem AD eine separate App erstellen, die mit dem Keyvault kommunizieren kann. Ich möchte meine eigene ID verwenden, um mit keyvault zu kommunizieren, kann aber nicht herausfinden, wie ich das Zugriffstoken erhalte, das der keyvault-Client benötigt.

Muss ich das Manifest in Azure Manuel aktualisieren und hinzufügen, dass meine Konsolen-App im Namen der Benutzer ein Token für keyvault erhalten darf? Welcher Code muss in GetAccessTokenAsync geändert werden, damit er funktionier

Ich habe versucht, ihm nur die Zugriffs- oder ID-Token aus der anfänglichen Token-Anforderung vom gemeinsamen Endpunkt zuzuweisen. Hat jemand Vorschläge, wie ich im Namen meiner eigenen ID und nicht einer App mit Azure Key Vault sprechen kann?

Aktualisiere

So sah ich mir die Überschriften an, als ich herausfand, dass mein Token vault.azure.net als Ressource fehlte und versuchte:

var testtoken = authContext.AcquireToken("https://vault.azure.net", ClientID, RedirectUri);

gibt den folgenden Fehler aus:

AADSTS65005: Die Clientanwendung hat den Zugriff auf die Ressource 'https: //vault.azure.ne '. Diese Anforderung ist fehlgeschlagen, da der Client diese Ressource nicht in der Liste "requiredResourceAccess" angegeben hat.

und Blick auf das aktuelle Manifest:

"requiredResourceAccess": [
    {
      "resourceAppId": "797f4846-ba00-4fd7-ba43-dac1f8f63013",
      "resourceAccess": [
        {
          "id": "41094075-9dad-400e-a0bd-54e686782033",
          "type": "Scope"
        }
      ]
    },
    {
      "resourceAppId": "00000002-0000-0000-c000-000000000000",
      "resourceAccess": [
        {
          "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
          "type": "Scope"
        }
      ]
    }
  ],

Woher weiß ich, welche Guids für den Gültigkeitsbereich und die resourceAppId für den Keyvault zu verwenden sind?

Temp Solution

Bis ich weiß, wie ich die resourceAppId und die zugehörigen Informationen erhalte, benutze ich den alten Trick, die Powershell-Tools zu verkörpern.

 var vaultToken = authContext.AcquireToken("https://vault.azure.net", "1950a258-227b-4e31-a9cf-717495945fc2", new Uri("urn:ietf:wg:oauth:2.0:oob"));
 var keyvault = new KeyVaultClient((_, b, c) => Task.FromResult(vaultToken.AccessToken));    
 var secrets = keyvault.GetSecretsAsync(vaultInfo.Vault.Properties.VaultUri).GetAwaiter().GetResult();

Quelle:http: //www.s-innovations.net/Blog/2014/02/12/Controlling-the-login-flow-when-using-ADAL-for-WAM Bitte lesen Sie auch den @ Bradygaster-Kommentar im Blog-Beitrag, bevor Sie die Powershells-Client-ID verwenden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage