#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, когда пользователь правильно перенаправляется на домашнюю страницу, если пользователь нажимает кнопку «Назад» в браузере с домашней страницы, он перенаправляется на
Если пользователь снова войдет в систему, он получит белый экран и сообщение «Ошибка корреляции». сообщение об ошибке. Похоже, что рукопожатие между нашим бэкэндом и 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());
}
Как мы можем предотвратить эту ошибку? Как мы должны обращаться с этим пользовательским интерфейсом? Я думаю, было бы лучше перенаправить пользователя на домашнюю страницу, если он уже вошел в систему.