Google Apache 反向代理中的 OAuth 重定向 URI
Google OAuth Redirect Uri in Apache Reverse Proxy
我正在尝试使用 Apache 作为连接到由 kestrel 托管的 ASP.NET CORE Web 应用程序的反向代理来设置 Web 服务器。我已经按照这里的教程进行操作:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
该网站使用 Google 日历 Api 来获取用户的日历信息。当我通过 Visual Studio 使用 Kestrel 托管它时,这工作正常。但是,当我尝试通过网络服务器验证 select 一个 Google 帐户时,我被重定向到
127.0.0.1:5000/signin-oidc
这不是想要的结果。 (127.0.0.1:5000 配置为 Apache 的 ProxyPass 和 ProxyReverse)。
由于 Web 应用程序在我 运行 没有 Apache 反向代理的情况下工作,我怀疑 Apache 配置存在一些问题。但是,Google.Apis.Auth.AspNetCore3 library I am using. I've used the the integrationtests 作为如何设置 startup.cs 以及如何发出 Api 请求的指南也可能是一个问题。
编辑:
所以我问了我正在使用的库的开发人员。重定向 uri 绑定到我监听的 kestrel 的端点。问题在这里:https://github.com/googleapis/google-api-dotnet-client/issues/1680
所以它只有在我能以某种方式让 kestrel 知道我的服务器的“实际”域名或 public IP 时它才能工作......根据我的研究,这似乎是接近的,如果不是不可能的话。我将研究授权和身份验证的其他实施选项。
已找到解决方案!
在我无尽的搜索和笨拙中,我发现我已经为我的 VirtualHost for apache 删除了转发 header。我还添加了 ProxyPreserveHost 选项。
我更改了虚拟主机以包含
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ServerName www.example.com
ServerAlias *.example.com
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
添加以上两个指令即可完成工作
参考文献:
我正在尝试使用 Apache 作为连接到由 kestrel 托管的 ASP.NET CORE Web 应用程序的反向代理来设置 Web 服务器。我已经按照这里的教程进行操作:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-3.1
该网站使用 Google 日历 Api 来获取用户的日历信息。当我通过 Visual Studio 使用 Kestrel 托管它时,这工作正常。但是,当我尝试通过网络服务器验证 select 一个 Google 帐户时,我被重定向到
127.0.0.1:5000/signin-oidc
这不是想要的结果。 (127.0.0.1:5000 配置为 Apache 的 ProxyPass 和 ProxyReverse)。
由于 Web 应用程序在我 运行 没有 Apache 反向代理的情况下工作,我怀疑 Apache 配置存在一些问题。但是,Google.Apis.Auth.AspNetCore3 library I am using. I've used the the integrationtests 作为如何设置 startup.cs 以及如何发出 Api 请求的指南也可能是一个问题。
编辑:
所以我问了我正在使用的库的开发人员。重定向 uri 绑定到我监听的 kestrel 的端点。问题在这里:https://github.com/googleapis/google-api-dotnet-client/issues/1680
所以它只有在我能以某种方式让 kestrel 知道我的服务器的“实际”域名或 public IP 时它才能工作......根据我的研究,这似乎是接近的,如果不是不可能的话。我将研究授权和身份验证的其他实施选项。
已找到解决方案!
在我无尽的搜索和笨拙中,我发现我已经为我的 VirtualHost for apache 删除了转发 header。我还添加了 ProxyPreserveHost 选项。
我更改了虚拟主机以包含
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
ServerName www.example.com
ServerAlias *.example.com
RequestHeader set X-Forwarded-Proto https
ProxyPreserveHost On
添加以上两个指令即可完成工作
参考文献: