2

Все примеры, которые я вижу о получении токена доступа для доступа к хранилищу ключей Azure, включают использование ClientId и ClientSecret для запроса маркера для известного ресурса https://vault.azure.net.Приобретение секретного ключа секретного ключа Azure с использованием встроенной безопасности

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

Например, у меня есть

const string VaultResource = "https://vault.azure.net"; 
var context = new AuthenticationContext(myTenantAuthority, false); 

// using integrated auth 
var token1 = await context.AcquireTokenAsync(VaultResource, nativeAppClientId, new UserCredential()); 

// OR interactive 
var token2 = context.AcquireToken(VaultResource, nativeAppClientId, new Uri("https://localhost"), 
    PromptBehavior.Auto, new UserIdentifier(UserPrincipal.Current.UserPrincipalName, UserIdentifierType.RequiredDisplayableId)); 

Обе эти попытки оказались неудачными. Первый из них говорит

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException occurred 
    ErrorCode=invalid_grant 
    HResult=-2146233088 
    Message=AADSTS65001: The user or administrator has not consented to use the application with ID '306d0ff4-0f32-4c38-bdb9-4ea500000000'. Send an interactive authorization request for this user and resource. 
Trace ID: 2ca2fb3f-3931-4868-b176-700f29158a3a 
Correlation ID: 39875bc5-cb1c-4a62-925d-7448d8716f30 
Timestamp: 2016-02-23 08:51:45Z 
    Source=Microsoft.IdentityModel.Clients.ActiveDirectory 
    StatusCode=400 
    StackTrace: 
     at Microsoft.IdentityModel.Clients.ActiveDirectory.HttpHelper.<SendPostRequestAndDeserializeJsonResponseAsync>d__0`1.MoveNext() 
    --- End of stack trace from previous location where exception was thrown --- 
     at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
     at Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.<SendHttpMessageAsync>d__15.MoveNext() 
    --- End of stack trace from previous location where exception was thrown --- 
     at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
     at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 

И второе:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException occurred 
    ErrorCode=access_denied 
    HResult=-2146233088 
    Message=AADSTS65005: The client application has requested access to resource 'https://vault.azure.net'. This request has failed because the client has not specified this resource in its requiredResourceAccess list. 
Trace ID: 5652658c-54bf-4880-bcc8-dea822a4b10b 
Correlation ID: 1f97c7c0-858f-4542-9936-4a5114a93cc0 
Timestamp: 2016-02-23 08:36:17Z 
    Source=Microsoft.IdentityModel.Clients.ActiveDirectory 
    StatusCode=0 
    StackTrace: 
     at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.RunAsyncTask[T](Task`1 task) 

Как обновить requiredResourceAccessList?

UPDATE: Вот как приложение настроено

enter image description here

+0

Возможно, вас заинтересует следующее: http://stackoverflow.com/questions/30096576/using-adal-for-accessing-the-azure-keyvault-on-behalf-of-a-user – fernacolo

ответ

0

Вам может понадобиться установить делегированные разрешения. Посмотрите здесь https://azure.microsoft.com/en-gb/documentation/articles/active-directory-integrating-applications/

Кроме того, вы можете рассмотреть возможность аутентификации с помощью сертификата. См. A more secure way to use key vault

+0

Проблема что я не могу добавить ключевое хранилище в качестве приложения – Jeff

+0

Возможно, вам просто нужно предоставить разрешения для «Windows Azure Active Directory»? – charisk

+0

у него уже есть ... – Jeff