0

ASP.NET Coreを使用して構築されたサンプルMVC Webアプリケーションがあります。私はまた、アカウントの確認を有効にしているので、ユーザーが登録すると、確認メールが届きます。私の開発用マシン(http://localhost:5000)上のKestrelサーバーを使ってローカルに実行すると、私のWebアプリケーションはうまく動作し、アカウントの確認がうまく動作します。リバースプロキシを使用してApacheサーバー上で実行されているASP.NETコアWebアプリケーションのアカウント確認エラー

リバースプロキシ(https://musicstore.paul.kim)を使用してApache Webサーバーを実行している私のUbuntuサーバーにWebアプリケーションを公開しました。 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 
}); 

はまた、あなたのバーチャルホストファイルの中であなたのapache/nginxのを設定する必要があります。

RequestHeader set X-Forwarded-Proto "https" 

ことトリックを行う必要があります! ;-)

+0

私はすでに 'Startup.cs'で' app.UseForwardedHeaders'を呼び出していましたが、apache/nginx vhostの 'RequestHeader'ディレクティブについては知りませんでした。アカウントの確認は、 'RequestHeader set X-Forwarded-Proto" https "をvhostに追加してApacheを再起動した後に動作します。 – kimbaudi

+0

先頭に戻る、doc(https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction)は 'Startup.cs'の' Configure'に 'app.UseForwardedHeaders'を前に追加するように言います'app.UseFacebookAuthentication'(またはその他の第三者認証)を呼び出してください。 – kimbaudi

関連する問題