ASP.Net Core - ошибка конечной точки маркера OAuth: состояние: BadRequest - PullRequest
0 голосов
/ 03 марта 2019

При использовании аутентификации ASP.Net Core для Google я выполняю следующий сценарий:

  1. Нажмите, чтобы войти через Google.
  2. Войти в Google успешно.В этот момент я вернулся к своему заявлению и могу продолжить процесс.Заявки пользователей были возвращены, как и ожидалось.
  3. Немедленно вернитесь к шагу 1 и попробуйте снова войти в систему через Google с той же учетной записью.Если появится запрос в Google, выберите ту же учетную запись / введите учетные данные еще раз.
  4. На данный момент я получаю сообщение об ошибке ниже.

Если я жду промежуток времени, возможно 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".

The error shown when UseDeveloperExceptionPage is enabled.

К вашему сведению, я совершенно не могу повторить проблему на своем iPhone и настольном ПК - я никогда не получаю проблему и могу сделать столькопопытки входа в систему, как я хочу, кажется, проблема никогда не возникает на этих устройствах.

Я потерян!

1 Ответ

0 голосов
/ 03 марта 2019

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

Проблема: На моем устройстве Pixel,У меня есть приложение (My-App), которое работает на том же домене, к которому я обращался в своем браузере Chrome.Когда я нажимал, чтобы войти через Google, я помню, что меня спрашивали, хочу ли я «Открыть в Chrome» или «Открыть в My-App», и я всегда выбирал «Открыть в Chrome».

Я удалил My-App, и теперь я не могу повторить проблему.Вопрос исчез.Я пробовал сценарий много раз безрезультатно, каждый раз, когда он работал!Когда я переустановил My-App, проблема вернулась.

Исправлено: проблема, которую мне нужно решить, - это запуск проекта Core в другом домене, отличном от домена, в котором работает My-App, поэтому не возникнет путаницы вустройство о том, должен ли Chrome открываться или должно открываться My-App.Надеюсь, это будет моим решением!

Спасибо за чтение.

...