При использовании аутентификации ASP.Net Core для Google я выполняю следующий сценарий:
- Нажмите, чтобы войти через Google.
- Войти в Google успешно.В этот момент я вернулся к своему заявлению и могу продолжить процесс.Заявки пользователей были возвращены, как и ожидалось.
- Немедленно вернитесь к шагу 1 и попробуйте снова войти в систему через Google с той же учетной записью.Если появится запрос в Google, выберите ту же учетную запись / введите учетные данные еще раз.
- На данный момент я получаю сообщение об ошибке ниже.
Если я жду промежуток времени, возможно 30минут, если я снова начну с шага 1, проблема не возникнет, пока я снова не достигну шага 4. Если я перезапущу свой IIS ApplicationPool для своего основного проекта, я могу следовать вышеописанному сценарию, где работает шаг 1, но затем шаг 4показывает проблему.
Я искал, что такое бесконечно онлайн, но безрезультатно.У кого-нибудь есть что-нибудь, что они могут предложить?Почему это сработало бы в первый раз, а затем не сработало со второй, третьей попытки?
При выполнении описанного выше сценария на моем телефоне Google Pixel 3 XL я получаю следующую ошибку:
System.Exception: SocialLoginController | Ошибка | Сбой конечной точки токена OAuth: Статус: BadRequest; Заголовки: Варьируется: X-Origin, Referer, Origin, Accept-Encoding: Дата, вс, 03 марта 2019 09:35:45 GMT Сервер: ESFCache-Control: частный X-XSS-Protection: 1;mode = block X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff Alt-Svc: quic = ": 443";ма = 2592000;v = "44,43,39" Диапазон принятия: нет Кодирование передачи: chunked; Тело: {"error": "invalid_grant",
"error_description": "Bad Request"};
Код в моем классе Startup.cs для аутентификации Google выглядит следующим образом:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/login";
options.LogoutPath = "/signout";
});
services.AddAuthentication().AddGoogle(socialProvider.ProviderName, o =>
{
o.ClientId = [REMOVED]
o.ClientSecret = [REMOVED]
o.UserInformationEndpoint = "https://www.googleapis.com/oauth2/v2/userinfo";
o.ClaimActions.Clear();
o.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id");
o.ClaimActions.MapJsonKey(ClaimTypes.Name, "name");
o.ClaimActions.MapJsonKey(ClaimTypes.GivenName, "given_name");
o.ClaimActions.MapJsonKey(ClaimTypes.Surname, "family_name");
o.ClaimActions.MapJsonKey("urn:google:profile", "link");
o.ClaimActions.MapJsonKey(ClaimTypes.Email, "email");
o.CallbackPath = string.Format("/signin-{0}", socialProvider.ProviderName.ToLower());
o.SaveTokens = true;
o.Events.OnRemoteFailure = ctx =>
{
string message = UrlEncoder.Default.Encode(ctx.Failure.Message);
if (!string.IsNullOrEmpty(message) && message.Length > 1500)
{
message = message.Substring(0, 1499);
}
ctx.Response.Redirect(errorRedirectUrl + message);
ctx.HandleResponse();
return Task.FromResult(0);
};
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Пожалуйста, также смотрите изображение ниже, которое показывает ошибку, когда я включил "UseDeveloperExceptionPage".
К вашему сведению, я совершенно не могу повторить проблему на своем iPhone и настольном ПК - я никогда не получаю проблему и могу сделать столькопопытки входа в систему, как я хочу, кажется, проблема никогда не возникает на этих устройствах.
Я потерян!