我正在使用Google身份验证创建AspNetCore应用程序。我正在Ubuntu服务器上的nginx反向代理后面部署这个应用程序。 几乎一切正常,但我遇到了回调网址的问题。
在Google开发者控制台中,我将http://localhost:5000/signin-google设置为授权重定向URI。这可以按预期工作,并允许我从工作站运行时使用Google身份验证。
对于制作,我将https://myserver/signin-google设置为授权重定向URI。但是,当我尝试使用它时,我从accounts.google.com收到错误http://myserver/signin-google(注意缺少的s)未获得授权。那是真的;它不应该被授权,我的服务器甚至不响应端口80的请求。
如何告知身份验证中间件我需要使用HTTPS作为回调URL?
答案 0 :(得分:5)
我终于明白了。
步骤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将忽略这些标头。安装处理它的中间件:
PM> Install-Package Microsoft.AspNetCore.HttpOverrides
步骤3:在Configure
功能中,应用中间件。
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedProto
});
这应该正确地将Context.Request.Scheme
值更改为https,这将导致身份验证中间件生成正确的redirect_uri
。