gpt4 book ai didi

ASP.NET MVC 站点在 AWS ELB 后面无法正常工作

转载 作者:行者123 更新时间:2023-12-01 01:56:09 25 4
gpt4 key购买 nike

我正在尝试将使用个人用户帐户的 ASP.NET MVC Web 应用程序部署到使用弹性负载均衡器 (ELB) 的 AWS 服务器。我已将该站点部署到 AWS 应用程序服务器上的 IIS,将其连接到我的 AWS SQL 服务器,并且它在服务器上按预期工作(实际上当我在 Visual Studio 中运行它或部署到内部服务器时)。

远程访问它时会出现问题,这当然是通过 ELB 进行的。

  • 如果我尝试访问 https://www.example.com/它不起作用 - 它会将我重定向到 http://www.example.com/Account/Login?ReturnUrl=%2F ,它挂起,然后我收到 408 错误。
  • 如果我尝试访问,例如,https://www.example.com/Dashboard/Index它不起作用 - 它会将我重定向到 http://www.example.com/Account/Login?ReturnUrl=%2FDashboard%2FIndex ,然后我得到 408 错误。
  • 如果我尝试访问 https://www.example.com/Account/Login直接,它工作正常。然后我可以登录,我网站中的所有页面都按预期工作。如果我退出,我会被重定向到 http://www.example.com/Account/Login?ReturnUrl=%2F ,然后我得到 408 错误。

  • 所以基本上,如果我登录了,那就没问题了。如果我没有登录,登录页面很好,但没有其他问题。我的想法,以及我们内部团队的一位与 AWS 合作的同事(顺便说一句,他无法帮助我,我已经问过了!)是当我被重定向到登录页面时,它是一个 HTTP 请求而不是 HTTPS ,这就是问题的原因,但无论我尝试过什么,我都无法使用 HTTPS 重定向。我试过了:
  • 在我的 web.config 文件中添加规则以接收转发的请求并将它们重定向到 HTTPS - 这似乎没有任何明显的区别
  • 添加到我的 FilterConfig 或登录操作的各种不同属性
  • 使用 URL 重写直接在 IIS 中添加规则

  • 显然,我的解决方法是让每个人都转到登录页面并从那里开始,而不仅仅是根 URL,但我真的很想进行排序,好像重定向在这里不起作用一样,我可以看到它在其他地方不起作用,并且可能导致问题。

    按要求更新:我实际上对我的 ELB 没有任何控制权,因为这是由不同的团队完成的,但我与团队交谈的理解是它接受流量为 HTTPS,然后将其作为 HTTP 传递到服务器。

    最佳答案

    您的 MVC 应用程序配置为在用户需要登录时重定向到绝对 http URL 而不是相对 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 后面添加以下内容属性(property):
    OnApplyRedirect = ApplyRedirect  

    然后,稍后在类中,添加以下函数:
    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 转换为相对 URL。然后将相对 URL 传递回浏览器。由于重定向是相对的,它应该维护 https URL。

    关于ASP.NET MVC 站点在 AWS ELB 后面无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40307134/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com