Ошибка корреляции при повторном входе в систему после нажатия кнопки «Назад» в браузере - PullRequest
0 голосов
/ 05 октября 2018

Хорошо, первый вопрос, будьте нежнее.Я боролся с этим уже около недели, и, наконец, я готов принять поражение и попросить о помощи.Вот что происходит.У меня есть IdentityServer4 IDP, API и основной клиент MVC.Я также взаимодействую с 2 внешними IDP OAuth2, предоставленными бизнес-клиентом.Моя проблема заключается в следующем:

  • Пользователь входит в систему через мой IDP (или, возможно, один из внешних)
  • Когда пользователь входит в Mvc Client, он нажимает кнопку "Назад"в своем браузере
  • , который возвращает их на страницу входа (какую бы учетную запись они не использовали)
  • Они повторно вводят учетные данные (войдите снова)
  • При перенаправлении обратно (либо наMVC в случае моего IDP или моего IDP в случае одного из внешних IDP) я получаю событие RemoteFailure с сообщением: ошибка корреляции

Проблема кажетсядля меня быть фактом, что вы пытаетесь войти, когда вы уже вошли (или что-то).Мне удалось разобраться со случаем входа в систему в моем IDP, поскольку шаг кнопки «Назад» переводит пользователя к моему действию «Вход в систему» ​​на контроллере (затем я проверяю, прошел ли пользователь аутентификацию, и отправляю его обратно в MVC, не показывая еголюбой странице), но с двумя другими ВПЛ кнопка «Назад» не нажимает ни на один код в моем ВПЛ.Вот параметры конфигурации для одного из внешних IDP OAuth2:

           .AddOAuth(AppSettings.ExternalProvidersSettings.LoginProviderName, ExternalProviders.LoginLabel, o =>
        {
            o.ClientId = "clientId";
            o.ClientSecret = "clientSecret";
            o.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
            o.CallbackPath = PathString.FromUriComponent(AppSettings.ExternalProvidersSettings.LoginCallbackPath);
            o.AuthorizationEndpoint = AppSettings.ExternalProvidersSettings.LoginAuthorizationEndpoint;
            o.TokenEndpoint = AppSettings.ExternalProvidersSettings.LoginTokenEndpoint;
            o.Scope.Add("openid");
            o.Events = new OAuthEvents
            {
                OnCreatingTicket = async context =>
                {
                    //stuff
                },
                OnRemoteFailure = async context =>
                {
                    if (!HostingEnvironment.IsDevelopment())
                    {
                        context.Response.Redirect($"/home/error");
                        context.HandleResponse();
                    }
                }
            };
       }

Другой такой же.Так как ошибка абсолютно одинакова независимо от используемого IDP, я предполагаю, что это не что-то родное для OIDC, а для промежуточного программного обеспечения OAuth и кода (параметров конфигурации), которые они совместно используют, поэтому я не собираюсь показывать конфигурацию OIDC на MVCклиент (если вы не настаиваете).Учитывая, насколько просты шаги воспроизведения, я думал, что найду ответ и объяснение своей проблемы довольно быстро, но я не смог.Может быть, исправить это тривиально, и я просто слепой.Независимо от ситуации, я буду признателен за помощь.

1 Ответ

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

Я мог бы воспроизвести вашу проблему.Когда пользователь возвращается к экрану входа в систему после успешного входа в систему, вполне возможно, что параметры запроса в URL этой страницы больше не действительны.Не думайте, что это проблема, специфичная для Identity Server.

Вы можете прочитать https://github.com/IdentityServer/IdentityServer4/issues/1251 https://github.com/IdentityServer/IdentityServer4/issues/720

Хотя вы не знаете, как этого избежать.

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