ADAL v3 - Как правильно избавиться от кода обновления токена? - PullRequest
0 голосов
/ 26 сентября 2018

В ADAL v2 мы делали это:

// Common parameter:
_clientCredential = new ClientAssertionCertificate(clientId, certificate);

// Get the token for the first time:
var userAssertion = new UserAssertion(accessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
_authResult = await authContext.AcquireTokenAsync(resource, _clientCredential, userAssertion);

// Refresh the token (when needed):
_authResult = await authContext.AcquireTokenByRefreshTokenAsync(authResult.RefreshToken, _clientCredential);

Обратите внимание, что для обновления токена нам нужны только предыдущий результат аутентификации и общие учетные данные клиента (_authResult и _clientCredential). Это очень удобно.

В ADAL v3 отсутствует AcquireTokenByRefreshTokenAsync, а здесь есть объяснение .Но это не говорит, в конкретных терминах, какие изменения необходимы.

Должны ли мы воспроизводить первый AcquireTokenAsync (и, следовательно, хранить resource, accessToken и userName, хранящиеся где-то всостояние программы)?

Или есть какой-нибудь способ получить актуальный токен только с общими элементами (_authResult и _clientCredential)?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Рекомендуемый подход для потока от имени в ADAL 3.x заключается в использовании:

try
{
 result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
 if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently ||
     adalException.ErrorCode == AdalError.InteractionRequired)
 {
  result = await ac. AcquireTokenAsync (resource, clientCredentials, userAssertion);
 }
}

Подробнее см. https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/wiki/Service-to-service-calls-on-behalf-of-the-user

Обратите внимание, что существуют сценариигде вы могли бы кэшировать токен обновления, полученный с помощью ADAL.NET v2.x, и чтобы помочь с миграцией из ADAL 2.x в MSAL.NET, мы планируем повторно представить AcquireTokenByRefreshToken в MSAL.NET (но не в ADAL 4.х)

0 голосов
/ 26 сентября 2018

Механизм использования токена обновления теперь предоставляется AcquireTokenSilentAsync.См. AcquireTokenSilentAsync с использованием кэшированного токена с использованием кэшированного токена для шаблонов для его использования.

Используете ли вы [ADAL token Cache] (http://www.cloudidentity.com/blog/2013/10/01/getting-acquainted-with-adals-token-cache/)? Это избавляет вас от управленияосновные детали реализации использования токенов обновления в вашем коде и проблема, с которой вы столкнулись.

...