使用针对Google的ASP.Net Core身份验证时,我正在执行以下方案:
如果我等待一段时间(也许是30分钟),如果我再次从步骤1开始,则直到再次到达步骤4时,我才遇到问题。如果为核心项目重新启动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 服务器:ESF缓存控制:专用X-XSS保护:1;模式=阻止 X框架选项:SAMEORIGIN X内容类型选项:nosniff Alt-Svc:quic =“:443”; ma = 2592000; v =“ 44,43,39”接受范围:无 传输编码:分块;正文:{“错误”:“ 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”时的错误。
仅供参考,我完全无法在iPhone和台式机上复制该问题-我从未收到该问题,并且可以尝试进行任意多次登录尝试,这些设备上似乎从未出现该问题。
我迷路了!
答案 0 :(得分:0)
我能够在这里识别出我的问题,该问题对于我发现的其他任何答案都是唯一的,但与我遇到的上述错误相同。
问题:在我的Pixel设备上,我有一个应用程序(My-App)可以在我在Chrome浏览器中访问的同一域上运行。单击以通过Google登录时,我记得它曾经问过我要“在Chrome中打开”还是“在我的应用程序中打开”,并且我始终选择“在Chrome中打开”。
我卸载了My-App,现在无法复制该问题。问题不见了。每当它工作时,我多次尝试该方案都无济于事!当我重新安装My-App时,问题又回来了。
修复::我需要解决的问题是,我的Core项目正在运行My-App的域之外的其他域中运行,因此设备上不会出现关于Chrome应该打开还是My-App应该打开。希望这将是我的解决办法!
感谢您的阅读。