Знак ADAL не обновляется

У меня есть приложение веб-форм ASP.NET, в котором я использую хранилище ключей Azure вместе с Active Directory Azure. Я использовал руководство, найденное здесь https://azure.microsoft.com/en-us/documentation/articles/storage-encrypt-decrypt-blobs-key-vault/ для получения токена из Azure Active Directory для моего приложения и используя его для доступа к моему хранилищу ключей, которое я в конечном итоге использую для шифрования хранилища. Все работает хорошо в первый раз, когда приложение запрашивает токен, но после истечения срока действия токена (через час). Приложение не получит новый токен, как должно. Я использую последний стабильный выпуск Microsoft.IdentityModel.Clients.ActiveDirectory 2.19.208020213 и пробовал последний предварительный выпуск (3.5.208051316-alpha).

Метод GetToken выглядит следующим образом

 Public Async Function GetToken(authority As String, resource As String, scope As String) As Task(Of String)
    Dim authContext = New AuthenticationContext(authority)
    Dim clientCred As New ClientCredential(CloudConfigurationManager.GetSetting("ClientID"), CloudConfigurationManager.GetSetting("ClientSecret"))
    System.Diagnostics.Trace.TraceInformation("Attempting to acquire auth token")
    Dim result As AuthenticationResult = await authContext.AcquireTokenAsync(resource, clientCred)
   System.Diagnostics.Trace.TraceInformation("Auth returned")
    If result Is Nothing Then
        System.Diagnostics.Trace.TraceInformation("Auth was null")
        Throw New InvalidOperationException("Failed to obtain the JWT token")
    End If
     System.Diagnostics.Trace.TraceInformation("Returning auth access token")
    Return result.AccessToken
End Function

Который используется здесь, чтобы получить соединение с хранилищем ключей

Dim cloudResolver As New KeyVaultKeyResolver(AddressOf GetToken)

Метод GetToken просто зависает в AcquireTokenAsync. Я включил подробное ведение журнала в ADAL, и это то, что показывает журнал, и он останавливается, и GetToken никогда не возвращается.

-Application: 2015-09-21T17:12:13  PID[8884] Information 9/21/2015 5:12:13 PM: 19ce5dc3-d618-48e9-8bbd-c5b3ad31bfc2 - TokenCache: Looking up cache for a token...
-Application: 2015-09-21T17:12:13  PID[8884] Information 9/21/2015 5:12:13 PM: 19ce5dc3-d618-48e9-8bbd-c5b3ad31bfc2 - TokenCache: An item matching the requested resource was found in the cache
-Application: 2015-09-21T17:12:13  PID[8884] Information 9/21/2015 5:12:13 PM: 19ce5dc3-d618-48e9-8bbd-c5b3ad31bfc2 - TokenCache: An expired or near expiry token was found in the cache
-Application: 2015-09-21T17:12:13  PID[8884] Information 9/21/2015 5:12:13 PM: 19ce5dc3-d618-48e9-8bbd-c5b3ad31bfc2 - TokenCache: An old item was removed from the cache

Кроме того, я попытался отключить кэширование токенов, установив для кэша токенов значение Nothing, и тогда ADAL даже не получит токен доступа в первый раз.

1 ответ

Решение

Я нашел ответ в этом похожем вопрос. Тайм-аут Azure KeyVault Active Directory AcquireTokenAsync при асинхронном вызове

Ключ должен был удалить любой из них и заменить их на ожидание

.GetAwaiter().GetResult()

Например это был оригинал

Dim theKey = cloudResolver.ResolveKeyAsync($"{CloudConfigurationManager.GetSetting("KeyVaultUrl")}Secret/", CancellationToken.None).GetAwaiter().GetResult()

Который был заменен на

Dim theKey = await cloudResolver.ResolveKeyAsync($"{CloudConfigurationManager.GetSetting("KeyVaultUrl")}Secret/", CancellationToken.None)
Другие вопросы по тегам