我正在使用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
。