【问题标题】:Getting Unathorized when trying to get a secret from Azure key Vault尝试从 Azure 密钥保管库获取机密时获得未经授权
【发布时间】:2017-10-13 14:14:35
【问题描述】:

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

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

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

在 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

一个旁注:尝试通过以用户身份登录来执行此操作。获取token的代码如下

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

我们有使用已注册 Azure AD 应用程序的 ID 和密码的工作代码,该应用程序有权访问密钥保管库。

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

【问题讨论】:

  • resourceUri 的值是多少?

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


【解决方案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.注册一个原生应用

2.添加 KeyVault 权限

3.添加上面的代码,在我这边测试一下。

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>

【讨论】:

  • 我的应用程序正在运行。我将您的代码与我的代码进行了比较,它们非常相似。我真的看不出有什么大的不同。今天早上,该应用程序刚刚开始工作。在安全更改通过 Azure 完全传播之前是否存在延迟?
  • 在您的情况下,这很奇怪。根据我的测试,在通过 azure 更改安全性之前没有延迟。
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 2022-08-20
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 2019-04-29
  • 1970-01-01
相关资源
最近更新 更多