我正在使用Google身份验证创建一个AspNetCore应用程序。我正在Ubuntu服务器上的Nginx反向代理后面部署此应用程序。几乎所有的东西都在工作,但是我在回调URL上遇到了麻烦。

在Google开发人员控制台中,我已将http://localhost:5000/signin-google设置为授权的重定向URI。这可以按预期工作,并允许我从工作站运行时使用Google身份验证。

对于生产,我将https://myserver/signin-google设置为授权的重定向URI。但是,当我尝试使用它时,从accounts.google.com收到错误消息,未授权http://myserver/signin-google(注意缺少s)。这是真的;它不应该被授权,我的服务器甚至不响应端口80的请求。

如何告诉身份验证中间件我需要它来使用HTTPS作为回调URL?

最佳答案

我终于弄明白了。

步骤1:确保Nginx正在发送必要的转发头,例如:

server {
    # other stuff ...
    location / {
        # other stuff ...
        proxy_set_header X-Forwarded-Proto $scheme;
        # you could also just hardcode this to https if you only accept https
    }
}

步骤2:默认情况下,AspNetCore将忽略这些 header 。安装处理它的中间件:
PM> Install-Package Microsoft.AspNetCore.HttpOverrides

步骤3:在Configure函数中,应用中间件。
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedProto
});

这应该将Context.Request.Scheme值正确更改为https,这将导致身份验证中间件生成正确的redirect_uri

09-16 04:55