Поменять в GoogleChallengeProperties redirect url c http на https
Недавно гугл стал требовать, чтобы при логине через него все redirect url были в виде https
Вот мой метод аутентификации, ранее работал
public async Task<IActionResult> GoogleLogin(string returnUrl)
{
var redirectUrl = Url.Action("GoogleLoginCallback", "Account", new { ret = returnUrl });
AuthenticationProperties prop = new GoogleChallengeProperties();
prop.RedirectUri = redirectUrl;
return new ChallengeResult("Google", prop);
}
А теперь выдает ошибку
Ошибка 400: invalid_request
Невозможно выполнить вход в приложение, поскольку оно не отвечает правилам Google в отношении безопасности OAuth 2.0.
Если вы разработчик приложения, убедитесь, что эти параметры запроса соответствуют правилам Google. redirect_uri: http://mysite/signin-google
Ну и в консоли гугла соответственно при попытке вставить допустимый для редиректа адрес с http
Invalid Redirect: This app has a publishing status of "In production". URI must use https:// as the scheme.
Как отсылать гуглу https адрес? То что я шлю в ChallengeResult - содержит относительный адрес, типа /account/signin-google, там нет места под https. Где указать что мой редирект url начинается именно с https?
Ответы (1 шт):
Если у вас приложение стоит за nginx (выполняющего роль прокси), а внутри оно использует обычный http (т.е. происходит ssl termination), то при проксировании трафика вам нужно дополнительно пробрасывать заголовки, например:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
А в asp.net core приложении добавить их поддержку:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.All,
KnownNetworks =
{
new IPNetwork(IPAddress.Parse("172.16.0.0"), 16)
}
});
В KnownNetworks нужно указывать из "доверенной" сети из которой будут приниматься эти заголовки (в приведенном примере указана дефолтная приватная подсеть докера, например, если у вас nginx и приложение запущены как разные контейнеры), без этого asp.net core будет просто их игноритовать и разрешать только из localhost (например, когда nginx и приложение запущены на одной машине).
После этого в Challenge должен генерироваться правильный redirect_uri.