2016-06-06 4 views
0

Я хочу использовать azure key vault в приложении winforms. Мне удалось добавить приложение в активный каталог Azure и создать секрет в ключевом хранилище с помощью powershell. приложение аутентифицируется, чтобы использовать секрет. К сожалению, я не могу использовать секрет в своем приложении winforms. Я получаю исключение:Azure Key Vault: sts_token_request_failed

* sts_token_request_failed: Ошибка токена для службы маркеров безопасности. Проверьте InnerException для получения более подробной информации.

InnerException: AADSTS70002: Ошибка проверки учетных данных. AADSTS50012:. Недопустимый клиент секрет предоставляется *

конфигурации:

<appSettings>  
<add key="ClientId" value="<appId>" /> 
<add key="ClientSecret" value="<nameofsecret>" /> 
<add key="SecretUri" value="https://<vaultname>.vault.azure.net/secrets/<nameofsecret>" /> 
</appSettings> 

Мой код:

public static string GetSecret() 
{ 
     var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(GetToken)); 
     var sec = kv.GetSecretAsync(ConfigurationManager.AppSettings["SecretUri"]).Result.Value; 
     return sec; 
} 

public async static Task<string> GetToken(string authority, string resource, string scope) 
    { 
     var authContext = new AuthenticationContext(authority,true); 
     ClientCredential clientCred = new ClientCredential(ConfigurationManager.AppSettings["ClientId"], 
      ConfigurationManager.AppSettings["ClientSecret"]); 
     try 
     { 
      AuthenticationResult result = authContext.AcquireToken(resource, clientCred); 

      if (result == null) 
       throw new InvalidOperationException("Failed to obtain the JWT token"); 

      return result.AccessToken; 
     } 
     catch (Exception ex) 
     { 
      return String.Empty; 
     }    
    } 

ли я изменить что-нибудь в манифесте или в app.config ? Что такое секретное имя? Это имя тайны, созданной в powershell? В исходном клиентском приложении у меня нет вкладки «configure» в активном каталоге, чтобы добавить ключ. Возможно, это проблема?

ответ

1

Вы вводите в заблуждение секрет клиента для своего приложения, зарегистрированного в Azure AD, с тайной, хранящейся в Key Vault.

Для доступа к ключевому хранилищу ваше приложение должно сначала получить токен доступа, что должно произойти в вашем методе GetToken. Существует несколько способов аутентификации AAD для получения токена, но наиболее распространенным является настройка ключа для вашего приложения и передача его в качестве секретности клиента.

enter image description here

Таким образом, значение вашей установки приложения ClientSecret бы этот ключ, а не имя секрета в ключевом хранилище.

После того, как вы получили токен, вы можете использовать его, чтобы прочитать секрет, хранящийся в хранилище ключей.


Так что это технический ответ на ваш вопрос. Существует целая дискуссия о том, как управлять секретами для родных приложений. С подходом к ключевому хранилищу вам все равно нужно иметь ключ, доступный вашему приложению, чтобы он мог получить доступ к ключевому хранилищу, поэтому вы вернулись туда, где вы начали с того, как вы защищаете , что и ключ.

+0

Я уже думал, что это проблема. К сожалению, я не могу создать ключ в активном каталоге для приложения, потому что это невозможно для приложения winforms. нет возможности добавить ключ на странице активного каталога «configure». – purbsel

Смежные вопросы