Неизвестный при попытке получить секрет из хранилища ключей Azure

Я использую Microsoft.Azure.keyVault, пытаясь получить секрет из хранилища ключей в Azure.

Я зарегистрировал приложение как для собственного, так и для веб-API.

Вход в AD прошел успешно (можно подтвердить это, получив действительный AccessToken на AuthenticationContext.AcquireTokenAsync).

В Azure AD обоим приложениям предоставлен контроль доступа (IAM) и политики доступа в Key Vault. Я подтвердил, что базовый URL-адрес хранилища ключей и секретное имя верны, но при выполнении следующего вызова

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, у которого есть права на хранилище ключей.

Попытка сделать то же самое без использования идентификатора и секрета связанного зарегистрированного приложения Azure AD, но вместо этого при получении токена доступа к Azure AD отображается запрос на вход.


person mike w    schedule 13.10.2017    source источник
comment
Какое значение имеет resourceUri?   -  person juunas    schedule 14.10.2017


Ответы (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>
person Tom Sun - MSFT    schedule 16.10.2017
comment
Мое приложение теперь работает. Я сравнил ваш код со своим, и они были очень похожи. Я действительно не видел серьезных различий. Сегодня утром приложение только начало работать. Есть ли задержка до того, как изменения безопасности полностью распространятся через Azure? - person mike w; 16.10.2017
comment
Очень странно, что в вашем случае., Согласно моему тесту, нет задержки перед изменением безопасности через лазурь. - person Tom Sun - MSFT; 17.10.2017