Хорошо, первый вопрос, будьте нежнее.Я боролся с этим уже около недели, и, наконец, я готов принять поражение и попросить о помощи.Вот что происходит.У меня есть 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клиент (если вы не настаиваете).Учитывая, насколько просты шаги воспроизведения, я думал, что найду ответ и объяснение своей проблемы довольно быстро, но я не смог.Может быть, исправить это тривиально, и я просто слепой.Независимо от ситуации, я буду признателен за помощь.