Ошибка подтверждения учетной записи в веб-приложении ASP.NET Core, запущенном на сервере Apache с использованием обратного прокси

У меня есть образец веб-приложения MVC, созданный с использованием ASP.NET Core. Я также включил подтверждение учетной записи, поэтому, когда пользователи регистрируются, они получают подтверждение по электронной почте. Мое веб-приложение работает нормально, и подтверждение учетной записи работает нормально, когда я запускаю его локально с помощью сервера Kestrel на моем компьютере разработки (http://localhost:5000).

Теперь я опубликовал свое веб-приложение на своем сервере Ubuntu, на котором запущен веб-сервер Apache, с использованием обратного прокси (https://musicstore.paul.kim). Я получил бесплатный SSL-сертификат для musicstore.paul.kim с помощью Let's Encrypt. Я установил обратный прокси-сервер для пересылки запросов с http://localhost:5000 на https://musicstore.paul.kim. Кажется, все работает нормально, за исключением того, что подтверждение учетной записи не работает. Когда я пытаюсь зарегистрировать нового пользователя, вводя адрес электронной почты и создавая пароль, я получаю электронное письмо через SendGrid со ссылкой для подтверждения моей электронной почты. Когда я нажимаю на эту ссылку, я попадаю в свое веб-приложение, и вместо подтверждения адреса электронной почты отображается сообщение об ошибке. Я просмотрел свой файл журнала и увидел сообщение об ошибке «Microsoft.AspNetCore.Identity.UserManager [9] VerifyUserTokenAsync () не удалось с целью: подтверждение электронной почты для пользователя 54a1c48c-4af7-454a-9c57-6b78c671be56».

Почему подтверждение учетной записи не работает на Apache с обратным прокси?

Как мне заставить его работать?


person kimbaudi    schedule 19.05.2017    source источник


Ответы (1)


Проблема заключается в том, что мы потеряли исходный протокол запроса клиента. Мы можем справиться с этим, добавив этот код в «Настроить» в startup.cs:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

Более того, вы должны настроить свой apache / nginx в своем файле vhost:

RequestHeader set X-Forwarded-Proto "https"

Это должно делать свое дело! ;-)

person userIndulgeInDChord    schedule 25.05.2017
comment
Я уже звонил app.UseForwardedHeaders в своем Startup.cs, но я не знал о директиве RequestHeader в vhost apache / nginx. Подтверждение учетной записи теперь работает после добавления RequestHeader set X-Forwarded-Proto "https" к моему виртуальному хосту и перезапуска apache. - person kimbaudi; 25.05.2017
comment
Напоминаем, что документ (docs.microsoft.com/en- us / aspnet / core / publishing / linuxproduction) говорит, что нужно добавить app.UseForwardedHeaders в Configure в Startup.cs перед вызовом app.UseFacebookAuthentication (или любой другой сторонней аутентификацией). - person kimbaudi; 25.05.2017