2016-10-28 15 views
2

個々のユーザーアカウントを使用するASP.NET MVC Webアプリケーションを、エラスティックロードバランサ(ELB)を使用しているAWSサーバーに展開しようとしています。 AWSアプリケーションサーバーにIISにサイトを展開し、AWS SQLサーバーに接続しました。これはサーバー上で正常に動作します(実際にはVisual Studioで実行するか、内部サーバーに展開します)。AWS ELBの背後でASP.NET MVCサイトが正しく機能しない

問題はELB経由でリモートアクセスするときに発生します。

基本的に、私がログインしていれば、大丈夫です。ログインしていないと、ログインページは正常ですが、それ以外は何もありません。 AWSで働いている社内チームの同僚(私はbtwを手伝ってもらえませんでした)は、私がログインページにリダイレクトされるとHTTPリクエストでありHTTPSではないということですそれが問題の原因ですが、私が何を試しても、HTTPSでリダイレクトすることはできません。私が試した:

  • は拾うために私のweb.configファイルにルールを追加し、要求し、HTTPSにリダイレクト転送 -
  • 様々な異なる属性のどちらかに追加された顕著な違いを作っているように見えるしません私に、FilterConfigまたはURLを使用してIISで直接ルールを追加ログインアクション

明らかに私の問題を回避するには、ログインページに移動し、ちょうどルートURLではなく、そこに開始するように皆を得ることですリライトが、私は思いますリダイレクトがそうでないかのようにソートされるのが本当に好きですここで働くと、私はそれが他の場所で働いていないことが分かり、問題を引き起こす可能性があります。

リクエストに応じて更新:私は実際には別のチームによって行われているように私のELBを制御することはできませんが、HTTPSとしてトラフィックを受け入れ、サーバーに渡すということですHTTPとして

+0

質問を更新して、ELBリスナーの設定を含めてください。 ELBがHTTPS(ロードバランサポート)を受け入れ、HTTP(インスタンスポート)としてサーバーにトラフィックを渡しますが、確認したいと思うようです。これは、AWS Web ConsoleのEC2> Load Balancing> Load Balancerの順に表示されます。 HTTPSとしてリクエストしないことが本当に問題である場合は、これを修正することもできます。 –

+0

@AnthonyNeaceが更新されました - 私はあなたが正しいと確信しています。それは設定されています – alfredbulbasaur

+0

'web.config'ファイルに、' forms'要素の 'loginUrl'値は何ですか? –

答えて

1

ユーザーがサインインする必要がある場合、MVCアプリケーションは相対URLではなく絶対http URLにリダイレクトされるように設定されています。

Owinミドルウェアに基づく新しいMVCアプリケーションでは、これはApp_Start/Startup.Auth.csに設定されています。

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    } 
}); 

OnValidateIdentityプロパティの後に次を追加します。

private static void ApplyRedirect(CookieApplyRedirectContext context) 
{ 
    Uri absoluteUri; 
    if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out absoluteUri)) 
    { 
     context.Response.Redirect(absoluteUri.PathAndQuery); 
     return; 
    } 

    context.Response.Redirect(context.RedirectUri); 
} 

は基本的に、これは絶対的なURLに変換され、次の機能を追加し、後でクラスで、そして

OnApplyRedirect = ApplyRedirect 

相対URLに変換します。その後、相対URLがブラウザに返されます。リダイレクトは相対的なので、httpsのURLを維持する必要があります。

+0

絶対 'Location:'リダイレクトを返すMVC Owinアプリケーションに基づいて答えを更新しました。この回答は、それを相対的なものに変換する方法を提供します。 –

+0

これは理にかなっています。現在のところ、プロダクション前のサーバーには何の違いもありませんが、現在はリダイレクトされていません。ちょうど500エラーです。この環境ですべてを分類したら、適切な試行をします。 – alfredbulbasaur

+0

私は実際には500のエラーを取得していないようだ、私はそれが正常に動作した別のコンピュータでそれを試したとき、私はクッキーなどをクリアしたときにうまくいきました。しかし、これは問題を解決しました - 多くの多くのありがとう! – alfredbulbasaur

関連する問題