ASP.Net核心-OAuth令牌终结点失败:状态:BadRequest

ASP.Net核心-OAuth令牌终结点失败:状态:BadRequest,asp.net,asp.net-core,oauth,oauth-2.0,core,Asp.net,Asp.net Core,Oauth,Oauth 2.0,Core,使用ASP.Net Core对Google的身份验证时,我将执行以下场景: 单击以通过谷歌登录 成功登录谷歌。在这一点上,我返回到我的应用程序,我能够继续我的进程。用户声明按预期返回 立即返回到步骤1,尝试使用相同的帐户再次通过谷歌登录。如果Google提示,请选择相同的帐户/再次输入凭据 此时,我收到以下错误 如果我等待一段时间,也许30分钟,如果我再次从步骤1开始,我不会遇到问题,直到我再次到达步骤4。如果我为我的核心项目重新启动IIS应用程序池,我可以按照上面的场景执行步骤1,但步骤4显示

使用ASP.Net Core对Google的身份验证时,我将执行以下场景:

  • 单击以通过谷歌登录
  • 成功登录谷歌。在这一点上,我返回到我的应用程序,我能够继续我的进程。用户声明按预期返回
  • 立即返回到步骤1,尝试使用相同的帐户再次通过谷歌登录。如果Google提示,请选择相同的帐户/再次输入凭据
  • 此时,我收到以下错误
  • 如果我等待一段时间,也许30分钟,如果我再次从步骤1开始,我不会遇到问题,直到我再次到达步骤4。如果我为我的核心项目重新启动IIS应用程序池,我可以按照上面的场景执行步骤1,但步骤4显示了问题

    我在网上无休止地搜索,但毫无结果。有人有什么建议吗?为什么第一次成功,第二次、第三次失败

    在我的Google Pixel 3 XL手机上执行上述场景时,我收到以下错误:

    系统。例外情况: SocialLogicler |错误| OAuth 令牌终结点失败:状态:BadRequest;标题:变化:X原点, 参考、来源、接受编码日期:2019年3月3日星期日09:35:45 GMT 服务器:ESF缓存控制:专用X-XSS-Protection:1;模式=块 X-Frame-Options:SAMEORIGIN X-Content-Type-Options:nosniff Alt Svc:quic=“:443”;ma=2592000;v=“44,43,39”接受范围:无 传输编码:分块;正文:{“错误”:“授权无效”,
    “错误描述”:“错误请求”}

    my 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);
    
    还请参见下面的图像,该图像显示了启用“UsedeveloperCeptionPage”时出现的错误

    仅供参考,我完全无法在我的iPhone和台式电脑上复制此问题-我从未收到此问题,我可以尝试任意多次登录,这些设备上似乎从未出现此问题


    我迷路了

    我在这里发现了我的问题,这与我在上面遇到的相同错误中找到的任何其他答案都是独一无二的

    问题:在我的像素设备上,我有一个应用程序(我的应用程序),它运行于我在Chrome浏览器中访问的同一个域。当点击谷歌登录时,我记得它问我是想“在Chrome中打开”还是“在我的应用程序中打开”,我总是选择“在Chrome中打开”

    我卸载了我的应用程序,现在我无法复制该问题。问题已经过去了。我尝试了很多次,但都没有成功,每次都有效!当我重新安装我的应用程序时,问题又出现了

    修复:我需要解决的问题是在不同的域上运行我的核心项目,而不是我的应用程序正在运行的域,因此设备上不会出现Chrome应该打开还是我的应用程序应该打开的混淆。希望这将是我的解决办法


    谢谢你的阅读

    我在这里发现了我的问题,这与我在上面遇到的相同错误中找到的任何其他答案都是独一无二的

    问题:在我的像素设备上,我有一个应用程序(我的应用程序),它运行于我在Chrome浏览器中访问的同一个域。当点击谷歌登录时,我记得它问我是想“在Chrome中打开”还是“在我的应用程序中打开”,我总是选择“在Chrome中打开”

    我卸载了我的应用程序,现在我无法复制该问题。问题已经过去了。我尝试了很多次,但都没有成功,每次都有效!当我重新安装我的应用程序时,问题又出现了

    修复:我需要解决的问题是在不同的域上运行我的核心项目,而不是我的应用程序正在运行的域,因此设备上不会出现Chrome应该打开还是我的应用程序应该打开的混淆。希望这将是我的解决办法

    谢谢你的阅读