ASP.Net Core - OAuth令牌端点故障:状态:BadRequest

问题描述 投票:0回答:1

使用ASP.Net Core的Google身份验证时,我正在执行以下方案:

  1. 点击通过Google登录。
  2. 成功登录Google。此时我回到了我的应用程序,我可以继续我的进程。用户声明按预期返回。
  3. 立即返回第1步,尝试使用同一帐户再次通过Google登录。如果在Google上提示,请选择相同的帐户/再次输入凭据。
  4. 此时我现在收到以下错误。

如果我等待一段时间,也许是30分钟,如果我再次从第1步开始,我不会遇到问题,直到我再次到达第4步。如果我为我的Core项目重启我的IIS ApplicationPool,我可以按照上面的说法步骤1工作的场景,但是第4步显示问题。

我搜索了无穷无尽的在线感觉无济于事。有没有人能提出任何建议?为什么这是第一次工作,然后第二次,第三次尝试失败?

我在Google Pixel 3 XL手机上按照上述方案收到以下错误:

System.Exception:SocialLoginController |错误| OAuth令牌端点失败:状态:BadRequest;标头:变化:X-Origin,Referer,Origin,Accept-Encoding Date:Sun,03 Mar 2019 09:35:45 GMT Server:ESF Cache-控制:私人X-XSS-Protection:1; mode = block X-Frame-Options:SAMEORIGIN X-Content-Type-Options:nosniff Alt-Svc:quic =“:443”; MA = 2592000; v =“44,43,39”Accept-Ranges:none Transfer-Encoding:chunked; Body:{“error”:“invalid_grant”, “error_description”:“错误请求”};

我的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和台式机上复制问题 - 我从未收到过这个问题,我可以根据需要进行尽可能多的登录尝试,这些设备上似乎不会出现这个问题。

我迷路了!

asp.net asp.net-core oauth oauth-2.0 core
1个回答
0
投票

我能够在这里找出我的问题,结果证明这是我在上面遇到的同样错误中找到的任何其他答案的独特之处。

问题:在我的Pixel设备上,我有一个应用程序(My-App),它运行在我在Chrome浏览器中访问的同一个域中。当点击通过谷歌登录时,我记得它问我是否想要“在Chrome中打开”或“在我的应用程序中打开”,并且我总是选择“在Chrome中打开”。

我卸载了My-App,现在我无法复制该问题。问题消失了。每次尝试这个场景都无济于事!当我重新安装My-App时,问题又回来了。

修复:我需要解决的问题是在My-App运行的域以外的其他域上运行我的Core项目,因此设备上不会混淆Chrome是否应该打开或My-App是否应该打开。希望这将是我的修复!

谢谢阅读。

© www.soinside.com 2019 - 2024. All rights reserved.