2017-10-13 64 views
1

我正在使用Microsoft.Azure.keyVault尝试从Azure中的密钥库中获取密钥。尝试从Azure密钥获取秘密时遇到Unathorized Vault

我已经注册了一个作为Native API和Web API的应用程序。

登录到AD是成功的(可通过在AuthenticationContext.AcquireTokenAsync上获取有效的AccessToken来确认这一点)。

在Azure AD中,这两个应用程序在密钥库中都有访问控制(IAM)和访问策略。我已经证实,重点库基地址和秘密名字是正确的,但做以下电话

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

我不断收到错误时

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

一个旁注:试图通过登录做到这一点作为用户。获得令牌的代码如下

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

我们已经使用具有权限的密钥库中的注册Azure的AD应用程序的ID和秘密工作的代码。

试图在不使用相关注册的Azure AD应用程序的标识和密码的情况下执行相同的操作,而是在将访问令牌获取到Azure AD时显示登录提示。

+0

什么是'resourceUri'价值? – juunas

回答

1

我用下面的代码测试它,它在我身边正常工作。该resourceUri是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; 
    } 

以下是我的详细步骤。

1.Registry的本机应用程序

2.增加KeyVault权限

enter image description here

3.添加上面的代码并对其进行测试在我的侧。

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

我的应用程序正在工作。我将你的代码与我的代码进行了比较,他们非常相似。我真的看不到任何重大差异。今天早上该应用刚刚开始工作。在安全更改完全通过Azure传播之前,是否有时间滞后? –

+0

在你的情况下,根据我的测试,在通过天蓝色安全变化之前没有任何滞后。 –