2017-10-13 3 views
1

J'utilise Microsoft.Azure.keyVault pour essayer d'obtenir un secret d'un coffre-fort clé dans Azure. J'ai enregistré une application comme Native et Web API.Obtention d'un certificat non autorisé lors de la tentative d'obtention d'un secret à partir de la clé Azure Vault

La connexion à l'AD est réussie (peut confirmer ceci en obtenant un AccessToken valide sur AuthenticationContext.AcquireTokenAsync).

Dans Azure AD, les deux applications ont reçu des stratégies de contrôle d'accès (IAM) et d'accès dans le coffre-fort de clés. Je confirme que la base de Key Vault Url et le nom secret sont corrects, mais lors de l'appel suivant

var sec = kv.GetSecretAsync("https://xxxxxxx.vault.azure.net", "xxsecretnamexx").GetAwaiter().GetResult(); 

Je continue à obtenir l'erreur

{"Operation returned an invalid status code 'Unauthorized'"} Microsoft.Azure.KeyVault.Models.KeyVaultErrorException 

Un sidenote: Toute tentative de le faire en vous connectant en tant qu'utilisateur Le code pour obtenir le jeton est la suivante

.AcquireTokenAsync(resourceUri,clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.SelectAccount)) 

Nous avons un code de travail en utilisant l'identifiant et secret d'une application AD Azure enregistré qui a des droits sur la voûte clé.

Essayez de faire la même chose sans utiliser l'ID et le secret d'une application Azure AD associée associée, mais d'afficher une invite de connexion lors de l'obtention du jeton d'accès à Azure AD.

+0

Quelle est la valeur pour 'resourceUri'? – juunas

Répondre

1

Je le teste avec le code suivant, il fonctionne correctement de mon côté. Le ResourceURI est https://vault.azure.net

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; 
    } 

Ce qui suit est mes pas de détail.

1.Registry une application native

2.Ajoutez keyvault Permission

enter image description here

3.Ajouter le code ci-dessus et de le tester sur mon côté.

enter image description here

Packages.config

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Hyak.Common" version="1.0.2" targetFramework="net461" /> 
    <package id="Microsoft.Azure.Common" version="2.0.4" targetFramework="net461" /> 
    <package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net461" /> 
    <package id="Microsoft.Azure.KeyVault" version="1.0.0" targetFramework="net461" /> 
    <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net461" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net461" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net461" /> 
    <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="3.17.0" targetFramework="net461" /> 
    <package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net461" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net461" /> 
</packages> 
+0

Mon application fonctionne maintenant. J'ai comparé votre code au mien et ils étaient très similaires. Je ne pouvais vraiment pas voir de différences majeures. Ce matin, l'application vient de commencer à travailler. Y a-t-il un décalage dans le temps avant que les modifications de sécurité ne se propagent complètement via Azure? –

+0

Il est très étrange que dans votre cas., Basé sur mon test, il n'y a pas de décalage avant que la sécurité change à travers azur. –