Получение сообщения об ошибке при реализации Azure Active Directory dotnetcore webapp для webapi openidconnect - PullRequest
0 голосов
/ 03 октября 2018

Получение ошибки при внедрении Azure Active Directory веб-приложения dotnetcore в webapi openidconnect

ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;
AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
AuthenticationResult result = await authContext.AcquireTokenSilentAsync(AzureAdOptions.Settings.TodoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));

Ошибка получения ниже

ErrorCode: failed_to_acquire_token_silently
Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException: Failed to acquire token silently as no token was found in the cache. Call method AcquireToken

1 Ответ

0 голосов
/ 03 октября 2018

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalSilentTokenAcquisitionException: не удалось получить токен в автоматическом режиме, так как токен не был найден в кэше.Вызовите метод AcquireToken

Если токена нет в кэше , AcquireTokenSilentAsync сгенерирует AdalSilentTokenAcquisitionException, и приложению понадобятся вызовы AcquireTokenAsync.

Убедитесь, что ваш токен-кеш не находится в памяти, поэтому он не стирается в случае перезапуска процесса.Еще одна вещь, которую вы можете сделать, это увеличить продолжительность сеанса.ASP.NET по умолчанию ограничивает его 20 минут , а OpenIdConnect по умолчанию следует за этим.Это означает, что он просто стирает эти токены через 20 минут, хотя токен обновления можно использовать гораздо дольше.

Для этого вам нужно будет изменить регистрацию промежуточного программного обеспечения OpenIdConnect в Startup.Auth.cs следующим образом:

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                // ... Rest removed for brevity
                UseTokenLifetime = false
            });

Затем в web.config установите желаемое время сеанса:

<system.web>
  <sessionState timeout="720" /><!-- 12 hour session duration -->
</system.web>

Для получения более подробной информации вы можете обратиться к этой статье .

...