0

ASP.NET 코어를 사용하여 빌드 된 샘플 MVC 웹 응용 프로그램이 있습니다. 또한 계정 확인을 사용하도록 설정 했으므로 사용자가 등록하면 확인 이메일이 전송됩니다. 내 개발 컴퓨터의 Kestrel 서버 (http://localhost:5000)를 사용하여 로컬로 실행할 때 웹 응용 프로그램이 제대로 실행되고 계정 확인이 올바르게 작동합니다.리버스 프록시를 사용하는 Apache 서버에서 실행중인 ASP.NET 코어 웹 앱에 대한 계정 확인 오류

이제 리버스 프록시 (https://musicstore.paul.kim)를 사용하여 Apache 웹 서버를 실행하는 내 Ubuntu 서버에 내 웹 앱을 게시했습니다. Let 's Encrypt를 사용하여 musicstore.paul.kim에 대한 무료 SSL 인증서를 받았습니다. http://localhost:5000에서 https://musicstore.paul.kim으로 요청을 전달하도록 역방향 프록시를 설정했습니다. 계정 확인이 작동하지 않는 것을 제외하고는 모두 정상적으로 실행되는 것 같습니다. 이메일을 입력하고 비밀번호를 작성하여 새 사용자를 등록하려고하면 이메일을 확인하는 링크가있는 SendGrid를 통해 이메일을받습니다. 해당 링크를 클릭하면 웹 응용 프로그램으로 이동하게되고 전자 메일을 확인하는 대신 오류 메시지가 표시됩니다. 내 로그 파일을 보았는데 오류 메시지가 "Microsoft.AspNetCore.Identity.UserManager [9] VerifyUserTokenAsync()가 사용자 54a1c48c-4af7-454a-9c57-6b78c671be56의 EmailConfirmation에 실패했습니다."

리버스 프록시가있는 Apache에서 계정 확인이 작동하지 않는 이유는 무엇입니까?

어떻게 작동시킬 수 있습니까?

답변

1

문제는 우리가 클라이언트의 원래 요청 프로토콜을 잃어버린 사실에 있습니다. 우리는 startup.cs의 "구성"에이 코드를 추가하여 처리 할 수 ​​있습니다

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

을 또한, 당신은 당신의 가상 호스트 파일로 아파치/nginx를 구성해야합니다 :

RequestHeader set X-Forwarded-Proto "https" 

그 속임수를 써야 해! ;-)

+0

이미'Startup.cs'에서'app.UseForwardedHeaders'를 호출하고 있었지만, apache/nginx vhost에서'RequestHeader' 지시어에 대해 알지 못했습니다. 계정 확인은 이제'RequestHeader set X-Forwarded-Proto "https"를 내 가상 호스트에 추가하고 아파치를 다시 시작한 후에 작동합니다. – kimbaudi

+0

헤드 업과 관련하여, doc (https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction)은 전에 'Startup.cs'에서'Configure'에'app.UseForwardedHeaders'를 추가한다고 말합니다 'app.UseFacebookAuthentication' (또는 다른 제 3 자 인증)을 호출합니다. – kimbaudi