Azure AD - получение утверждений с областью offline_access (библиотека ADAL) - PullRequest
0 голосов
/ 25 сентября 2019

Я использую библиотеки Microsoft для реализации OAuth для Azure AD в веб-приложении .NET.

Я использую метод AcquireTokenSilentAsync, основанный на постоянных кэшированных токенах, для получения объекта AuthenticationResult.Этот объект содержит свойство UserInfo, которое можно использовать для получения значений утверждений для создания объекта ClaimsIdentity.

Я пытаюсь понять, какие области следует передать параметру Scope OpenIdConnectAuthenticationOptions.

Я использовал значение OpenIDConnectScope.OpenIDProfile, которое переводится как «профиль openid» - это успешно получало заявки.Но он не возвращает токен обновления для обработки обновления токена доступа после истечения срока его действия (что я и хочу).

Поэтому я понял, что мне нужно использовать OpenIDConnectScope.OfflineAccess, что переводится как «offline_access».Это само по себе возвращает объект AuthenticationResult.UserInfo со всеми его свойствами, установленными в «null».

Я подумал, что попытался бы использовать несколько областей;что-то вроде 'openid profile offline_access', но пока в значениях параметров Scope есть 'offline_access', объект UserInfo всегда возвращает нулевые значения!

Почему это происходит?Как правильно включить обновление токена доступа, а также получить объект UserInfo для создания объекта ClaimsIdentity?

1 Ответ

0 голосов
/ 27 сентября 2019

Я полагаю, что вы используете ADAL.NET v3, верно?

ADAL v2 использовался для предоставления токена обновления, потому что вам приходилось обрабатывать обновление самостоятельно.В ADAL v3 это выполняется библиотекой автоматически.

Ваш код должен выглядеть примерно так:

try
{
 result = await authContext.AcquireTokenSilentAsync(graphResourceId, clientId);
}
catch (AdalException adalException) 
{
 if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently || adalException.ErrorCode == AdalError.UserInteractionRequired)
 {
  result = await authContext.AcquireTokenAsync(graphResourceId,
                                               clientCred, 
                                               userAssertion);
 }
}

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...