Нажатие кнопки «Назад» в браузере после успешного входа в Google вызывает ошибку

#asp.net-core #.net-core #google-authentication

#asp.net-core #.net-ядро #google-аутентификация

Вопрос:

У нас есть веб-приложение с серверной частью .NET Core 3.1 API, использующее аутентификацию Google с Microsoft.AspNetCore.Аутентификация.Google 3.1.21. Наша проблема заключается в том, что после успешного входа в Google, когда пользователь правильно перенаправляется на домашнюю страницу, если пользователь нажимает кнопку «Назад» в браузере с домашней страницы, он перенаправляется на

https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?response_type=codeamp;client_id=########-ppijr.apps.googleusercontent.comamp;redirect_uri=https://localhost:44344/callback-googleamp;scope=openid profile emailamp;state=pbLoQI2RI4UR3dWgyyrZHHK2Fwzd73CTD-zBlKHUE-IKzfEE5JFrY_dRoTeHU-N0pE3kns6t2kAdn_JRMSO03GNghb5OmzDBDMsxiFCpF_bwArG-RPDwsVUFAamp;flowName=GeneralOAuthFlow

Если пользователь снова войдет в систему, он получит белый экран и сообщение «Ошибка корреляции». сообщение об ошибке. Похоже, что рукопожатие между нашим бэкэндом и Google завершается неудачно, и пользователь перенаправляется на серверный URL.

Ниже приведен фрагмент того, как мы подключаем аутентификацию Google.

   var authBuilder = services.AddAuthentication(options =>
                      {
                        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                      })
                      .AddCookie(options =>
                      {
                        options.Events.OnRedirectToAccessDenied = RedirectHandler.DontRedirectAjaxOrApiRequestToForbidden;
                        options.Cookie.SameSite = SameSiteMode.None;
                        options.ExpireTimeSpan = TimeSpan.FromMinutes(somevalue);
                        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                      });            

authBuilder.AddGoogle("Google", options =>
    {
      options.ClientId = clientId;
      options.ClientSecret = clientSecret;
      options.CallbackPath = "/callback-google";
      options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
      options.Events.OnCreatingTicket = ctx =>
      {
        // More code here to add custom claim.
        ctx.Principal.AddIdentity(identity);
        return Task.CompletedTask;
      };
      options.Events.OnRedirectToAuthorizationEndpoint = RedirectHandler.DontRedirectAjaxRequestToGoogle;
      options.Events.OnRemoteFailure = ctx =>
      {
        //log warning here
        return Task.CompletedTask;
      };
    });
    schemes.Add(AuthenticationConstants.SCHEME_GOOGLE);
 

Ниже приведен наш метод настройки из Startup.cs

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  if (env.IsDevelopment())
  {
    app.UseDeveloperExceptionPage();
    // Uncomment locally to view exceptions that are hidden for GDPR
    // IdentityModelEventSource.ShowPII = true;

  }
  else
  {
    app.UseHsts();
  }

  app.UseApiWrapper()
      .UseHttpsRedirection()
      .UseRouting()
      .UseSentryTracing() 
      .UseCors()
      .UseCookiePolicy()
      .UseAuthentication()
      .UseAuthorization()
      .UseEndpoints(endpoints => endpoints.MapControllers());
}
 

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