asp.net-mvc - 有没有办法覆盖 CallbackPath 以包含该方案?
问题描述
使用 OAuth 2.0,我们将我们的应用程序设置为使用 Google 作为外部登录名,并且一切正常,直到 Google 发生了一些变化,现在它抱怨:
您无法登录此应用,因为它不符合 Google 用于确保应用安全的 OAuth 2.0 政策。
我认为这里的问题是,虽然我们redirect_url
在 Google 控制台中设置了 to https://ourwebsite.com/signin-google
,但我们的服务器位于负载均衡器后面,负载均衡器和实际服务器之间的连接是http
(因为它完全是一个内部网络)与提供https
给外部世界的负载均衡器。这在以前没有引起问题,但现在看来它不起作用。
所以谷歌似乎看到了redirect_url
并http://ourwebsite.com/signin-google
拒绝了它。我们试图强制它按照这样的方案发送redirect_url
with https
:
app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
{
ClientId = googleKey,
ClientSecret = googleSecret,
CallbackPath = new PathString(@"https://ourwebsite.com/signin-google")
});
但这会抱怨,因为:
The path must start with a '/' followed by one or more characters.
换句话说,您不能在那里放置完全合格的路径。那么有没有办法redirect_url
在它被发送到谷歌来纠正这个方案之前改变它?
这是 Google 错误的屏幕截图,显示 Google 将其redirect_uri
视为http
更新:
我尝试将其添加到Startup.Auth.cs
:
app.Use((ctx, next) =>
{
ctx.Request.Scheme = "https";
return next();
});
而且,令人惊讶的是,它让我通过了 Google 身份验证错误。不幸的是,然后我被重定向到https:///ourwebsite.com/Account/ExternalLoginCallback?error=access_denied
,我不确定为什么。我怀疑它可能在返回的令牌中存在某种不匹配,因为它是 forhttps
并且后端仍在将它与http
? 有没有解决的办法?
解决方案
推荐阅读
- python - 基于正则表达式创建两个数据框
- java - 如何在任务中关闭带有名称的库存
- javascript - 使用 JavaScript 循环中的两个数组
- c# - ShareFile 用户使用 API 邀请到 Podio 工作区
- ubuntu - 如何使用通过 sssh 连接的 ubuntu 在浏览器上打开链接
- sbt - AKKA 集群:在 2 个远程节点之间发送和接收参与者消息
- xamarin.forms - 在选择器 xamarin 表单上获取 selectedindexchanged 上的选定项目源绑定值
- ios - Firebase:iOS应用程序被杀死并重新启动后如何保留用户提要
- netflix-zuul - micronaut 可以与 zuul 或 spring 云网关之类的网关一起使用吗?
- java - 为什么我的同步方法不能正常工作?