【问题标题】:Why do I keep getting HTTP 403 error on shared hosting?为什么我在共享主机上不断收到 HTTP 403 错误?
【发布时间】:2017-09-12 06:32:43
【问题描述】:

我有一个 MVC 5 应用程序,在 .NET 4.6 和 MVC 5.2.3 下开发,当我在我的机器上的 Chrome 和 Edge 中调试它时,它可以 100% 运行。当我部署到我的 ISP 的共享主机时,它会在第一个请求之后的每个请求上给出以下错误,该错误成功并显示登录页面。

403 - 禁止:访问被拒绝。 您无权使用您提供的凭据查看此目录或页面。

然后,如果我从 Chrome 中清除一个名为 .AspNet.ApplicationCookie 的 cookie,则下一个请求会成功,但 cookie 又回来了,所有后续请求都以相同的方式失败。

我没有在我自己的任何代码中使用应用程序状态,我添加到标准 VS2015 项目模板附带的包中的唯一包是:

AutoMapper
elmah.corelibrary
Elmah.Mvc
Unity
Unity.Mvc5

如果我做得正确,当我在 Edge 中检查 cookie 时,没有这样的 cookie,只有 __RequestVerificationToken,它在 Chrome 中没有任何作用(在这个问题的范围之外)。

注意:我现在更改了托管服务提供商,自从应用程序启动后的第一次请求后,几乎每个请求都没有收到 403,我现在大约每 1 到 2 次重定向到我的登录页面分钟。看起来一个提供商正在更好地处理我缺乏身份验证的问题,但强烈怀疑这两个问题都是由于会话丢失造成的。这可能是由于共享主机上的资源有限,所以我尝试在 SQL Server 上存储会话,但没有任何区别,并且 Elamh 没有显示错误,所以我不知道我的会话移动是否有效。

【问题讨论】:

  • 主机上的其他应用可以用吗?
  • 不,@SamuelTulach,我没有其他主机或应用程序,并且由于更改主机已经缓解了这个问题,正如我在问题底部的注释所说,我不能接受一个 aoo down 并尝试另一个。
  • 关于您的下一次托管尝试,您是否在 web.config 中设置了 MachineKey?大多数共享主机负载平衡您的网站。在不设置机器密钥的情况下,IIS 会自己生成一个。如果两台服务器各自生成自己的机器密钥,它们就无法读取彼此的加密 cookie。因此,您似乎已注销。 msdn.microsoft.com/en-us/library/… 请注意,身份验证和会话管理是 Web 应用程序中两个完整且不同的东西。 “退出”与会话无关。
  • @Tommy 感谢有关会话和登录的说明;如果登录是会话的特殊部分还是 100% 单独的,我一直不太清楚。我确实有一个在第一台主机上没有任何区别的机器密钥,但我想我在某处回滚时丢失了它。我会检查并再次添加。
  • NP 教授,有机会的话告诉我你的测试进展如何!

标签: asp.net asp.net-mvc google-chrome cookies asp.net-mvc-5


【解决方案1】:

查看 cookie 名称听起来好像服务器配置为使用 cookie 身份验证,而您使用的是默认 cookie 名称。

这种类型的身份验证根据机器密钥对 cookie 进行解密。由于它是共享机器上的托管环境,因此它的解密方式与其他应用程序相同,并且其他应用程序可能使用相同的默认 cookiename。

这意味着身份验证会干扰其他应用程序,这就是您得到 403 的原因,即使我不完全确定错误的确切点。

解决方案是在 Startup.Auth.cs 中设置不同的 Cookiename

您在这里有一个相关的问题,其中包含设置 cookie 名称的代码示例:Why do ASP.NET Identity logins from one site get shared with different websites on the same machine?

希望能解决您的问题。

【讨论】:

    【解决方案2】:

    我认为您正在使用新的 dotnet core Cookie 中间件。该中间件在 cookie 值中加密您的会话数据。

    问题在于加密/解密是基于每个应用程序主机唯一的密钥(基于机器密钥)完成的。因此,如果您的请求位于与会话 cookie 加密位置不同的实例上,则它无法解密您的 cookie,因此认为您未通过身份验证!

    您可以通过实现不同的后备存储(如 redis 或 sql server)来更改此行为。

    阅读有关如何执行此操作的文档:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie

    【讨论】:

    • 这听起来很像在黑暗中拍摄。 OP 说他们在哪里使用 Core 或多个服务器?
    • @CodeCaster 根据您的描述,它看起来很像我遇到的问题。您能告诉我:您的 cookie 值在浏览器中的外观如何?它是一个短标识符还是看起来像一个长加密字符串?您是如何在 MVC5 中配置 Cookie/会话身份验证的?
    • @CodeCaster,对我使用 Core 有好处,因为我特别声明我使用的是 .NET 4.6 和 MVC 5.2.3,但我还说我在共享主机上,这意味着我只是 1一个 IIS“实例”上的数百个网站,但没有人知道该“实例”共享了多少台服务器。
    • 您对多台服务器有意见,尽管我确实说过我没有使用核心,并且我确实说过我已经尝试切换到新的 SQL Server 后备存储。
    猜你喜欢
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 2017-04-16
    • 2014-04-12
    相关资源
    最近更新 更多