Корреляция не удалась. в Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler во время аутентификации OIDC - PullRequest
0 голосов
/ 02 мая 2018

Я бью это следующей комбинацией: 1) Режим инкогнито в браузере (Chrome) 2) Приложение находится за шлюзом приложений Azure (без воспроизведения, если это не так) Сходство на основе файлов cookie отключено (по умолчанию); при включении кажется, что репро происходит чаще.

Код довольно простой ванильный OIDC authN + куки.

        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddAzureAd(options => {
            Configuration.Bind("AzureAd", options);
        })
        .AddCookie(p => p.SlidingExpiration = true);

Я пересылаю заголовок X-Forwarded-Proto в промежуточное программное обеспечение аутентификации, как рекомендовано, поэтому redirect_uri использует правильную схему протокола.

ОБРАЩЕНИЕ В КОДЕКСЕ

Я попытался обработать событие OnRemoteFailure () и перенаправить на «/ Home / AuthRedirect», которая является дополнительной страницей, которая ждет 20 секунд, а затем перенаправить на «/» (домашняя страница ). Кажется, иногда работает, но не всегда. У меня нет идей.

* 1017 Временное решение *

1) Пользователи могут снова зайти на домашнюю страницу и нажимать F5, пока это не сработает. Кажется, что каждый F5 заставляет их двигаться на шаг впереди, и как только печенья OpenID заполняются, все остальное (у меня больше аутентификации после завершения openid, через adal.js для использования AJAX). 2) Обходите шлюз приложения и используйте DNS-имя кластера фабрики прямого обслуживания (недопустимо, поскольку это http).

информация

System.Exception: корреляция не удалась. в Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.d__12.MoveNext () --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext () --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext () --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext () --- Конец стека трассировки от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.d__7.MoveNext ()

image

Ответы [ 3 ]

0 голосов
/ 23 июня 2018

У меня была такая же проблема. Я определял несколько внешних конечных точек для авторизации. В моем случае я определил пути обратного вызова, которые использовались несколькими клиентами. Как только я определил уникальные пути обратного вызова, проблема была решена: Пример:

  options.Authority = …..";
.
.
  options.CallbackPath = "/signin-idsrv2"; // I already had /sign-in-idsrv

Аналогично, убедитесь, что SignedOutCallbackPaths уникальны. Надеюсь, что это работает для вас.

0 голосов
/ 15 февраля 2019

У меня была та же проблема, но моя проблема была из-за моего понимания процесса аутентификации, что было неправильно. Есть два URL-адреса обратного вызова, которые важны, и я думал, что они служат той же цели. Я был так неправ.

Это определено в Startup.cs

.AddOpenIdConnect("Auth0", options =>
            {
                options.CallbackPath = new PathString("/signin-auth0");

Он сообщает промежуточному программному обеспечению авторизации в вашем приложении, по какому URL он должен прослушиваться, когда провайдер аутентификации возвращается после успешной аутентификации. Затем само промежуточное ПО перенаправит приложение на URL-адрес обратного вызова, определенный в действии «Вход в систему» ​​(пример кода приведен ниже).

После этого (два дня борьбы) все заработало.

public class AccountController : Controller
{
    [HttpGet]
    public async Task Login()
    {
        await HttpContext.ChallengeAsync("Auth0", new AuthenticationProperties() { RedirectUri = "/my-callback-page" });
    }
}
0 голосов
/ 29 мая 2018

У меня та же проблема, если ваша среда - веб-ферма, вы должны использовать DataProtection для совместного использования ключа.

...