使用来自 MVC5 网站的 Google OAuth2 的身份验证失败(GetExternalLoginInfo 始终为空)
Authentication using Google OAuth2 from MVC5 Website Failing (GetExternalLoginInfo always null)
我正在按照这些说明创建一个简单的 MVC5 网站,该网站允许使用 Google 和 Facebook 通过 OAuth2 进行外部身份验证:
我正在使用 Visual Studio 2015 Professional,目标是 .Net 4.5.2,并且我所有的 nuget 包都是最新的最新稳定版本(截至 08/18)。
此外,我的项目已设置为始终使用 https/SSL。
我已经进入“为 OAuth 2 创建 Google 应用程序并将该应用程序连接到项目”部分并创建了一个示例 Web 应用程序项目在 Google 开发者控制台中,启用 Google+ API - 我的启用 API 列表是:
- BigQuery API
- 云调试器API
- Debuglet 控制器API
- Google 云日志记录 API
- Google云SQL
- Google 云存储
- Google 云存储 JSON API
- Google+API
...基本上是默认的,加上Google+。
我添加了授权重定向 URI (https://localhost:44300/signin-google) 授权 Javascript 来源(根据之前删除的 /signin-google)和 Google 项目.我还在 OAuth 同意屏幕中设置了产品名称(但除了我的电子邮件之外别无其他)。
除了执行以下操作外,我没有触及解决方案中生成的代码:
在 Startup.Auth.cs
中,取消注释 app.UseGoogleAuthentication
部分并添加来自 Google 项目(凭据部分)
的客户端 ID 和密码
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = "xxxxx.apps.googleusercontent.com",
ClientSecret = "xxxxx"
});
在 ExternalLogin
的 Post 版本中将 Session["Workaround"] = "workaround";
添加到 AccountController
所以我 运行 应用程序并尝试通过 Google 登录(使用出现在屏幕上的按钮)。我被要求输入我的 Google 凭据,我成功地输入了。然而,在返回我的应用程序时,我看到的是:
- 从 Google 返回的查询字符串附加了
error=access_denied
(通过 Fiddler 确认)
- (因此?)在
AccountManager
中对 AuthenticationManager.GetExternalLoginInfoAsync();
的调用总是 returns null,我再次被重定向到登录页面
- 因此我从来没有机会将 Google 登录名与我的应用程序相关联
- 我还注意到 Google 开发人员控制台中的默认配额请求为零,Google+ API 使用部分中的登录配额请求为零(尽管我在过去几天一直在强调这一点。
我不知道接下来要尝试什么。我在网上浏览了一下这个,几乎我读过的所有内容都说启用 Google+ API, and/or 在会话中设置占位符应该可以解决这个问题,但这两种选择都不适合我。
欢迎提出任何想法。
谢谢
五欧元
所以 - 我应该提到我在工作中这样做,并且坐在公司防火墙后面。
因为这是导致问题的原因。
进一步检查 Fiddler 日志显示了一大堆 407 Proxy Authentication Required 响应。
因此,我将应用程序部署到 Azure 而没有进行任何代码更改(我确实更改了 google 凭据以添加 Azure URI),并且它直接运行起来。
代理有很多其他的解决方法(远程调试 Azure 应用程序,或从我的本地 SQL 服务器连接到 Azure 数据库),但它们适用于我和防火墙团队锻炼。我正在做的事情实际上还处于概念阶段,所以我现在可以接受它。
//五欧元
我正在按照这些说明创建一个简单的 MVC5 网站,该网站允许使用 Google 和 Facebook 通过 OAuth2 进行外部身份验证:
我正在使用 Visual Studio 2015 Professional,目标是 .Net 4.5.2,并且我所有的 nuget 包都是最新的最新稳定版本(截至 08/18)。 此外,我的项目已设置为始终使用 https/SSL。
我已经进入“为 OAuth 2 创建 Google 应用程序并将该应用程序连接到项目”部分并创建了一个示例 Web 应用程序项目在 Google 开发者控制台中,启用 Google+ API - 我的启用 API 列表是:
- BigQuery API
- 云调试器API
- Debuglet 控制器API
- Google 云日志记录 API
- Google云SQL
- Google 云存储
- Google 云存储 JSON API
- Google+API
...基本上是默认的,加上Google+。
我添加了授权重定向 URI (https://localhost:44300/signin-google) 授权 Javascript 来源(根据之前删除的 /signin-google)和 Google 项目.我还在 OAuth 同意屏幕中设置了产品名称(但除了我的电子邮件之外别无其他)。
除了执行以下操作外,我没有触及解决方案中生成的代码:
在
的客户端 ID 和密码Startup.Auth.cs
中,取消注释app.UseGoogleAuthentication
部分并添加来自 Google 项目(凭据部分)app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() { ClientId = "xxxxx.apps.googleusercontent.com", ClientSecret = "xxxxx" });
在
ExternalLogin
的 Post 版本中将Session["Workaround"] = "workaround";
添加到AccountController
所以我 运行 应用程序并尝试通过 Google 登录(使用出现在屏幕上的按钮)。我被要求输入我的 Google 凭据,我成功地输入了。然而,在返回我的应用程序时,我看到的是:
- 从 Google 返回的查询字符串附加了
error=access_denied
(通过 Fiddler 确认) - (因此?)在
AccountManager
中对AuthenticationManager.GetExternalLoginInfoAsync();
的调用总是 returns null,我再次被重定向到登录页面 - 因此我从来没有机会将 Google 登录名与我的应用程序相关联
- 我还注意到 Google 开发人员控制台中的默认配额请求为零,Google+ API 使用部分中的登录配额请求为零(尽管我在过去几天一直在强调这一点。
我不知道接下来要尝试什么。我在网上浏览了一下这个,几乎我读过的所有内容都说启用 Google+ API, and/or 在会话中设置占位符应该可以解决这个问题,但这两种选择都不适合我。
欢迎提出任何想法。
谢谢
五欧元
所以 - 我应该提到我在工作中这样做,并且坐在公司防火墙后面。
因为这是导致问题的原因。
进一步检查 Fiddler 日志显示了一大堆 407 Proxy Authentication Required 响应。
因此,我将应用程序部署到 Azure 而没有进行任何代码更改(我确实更改了 google 凭据以添加 Azure URI),并且它直接运行起来。
代理有很多其他的解决方法(远程调试 Azure 应用程序,或从我的本地 SQL 服务器连接到 Azure 数据库),但它们适用于我和防火墙团队锻炼。我正在做的事情实际上还处于概念阶段,所以我现在可以接受它。
//五欧元