尝试从Azure密钥保险库获取密码时获取Unathorized

时间:2017-10-13 14:14:36

标签: c# azure-active-directory azure-keyvault

我正在使用Microsoft.Azure.keyVault尝试从Azure中的密钥保管库获取密码。

我已将应用程序注册为Native和Web API。

登录AD成功(可以通过AccessToken获得有效的AuthenticationContext.AcquireTokenAsync来确认。

在Azure AD中,两个应用程序都在Key Vault中获得了访问控制(IAM)和访问策略。我已确认Key Vault Base Url和Secret Name是正确的,但在进行以下调用时

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应用程序的ID和密码的情况下执行相同操作,但在获取Azure AD访问令牌时会显示登录提示。

1 个答案:

答案 0 :(得分: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>