【发布时间】:2016-05-19 02:36:49
【问题描述】:
在托管在 Azure 上的 ASP.NET 网站上,我需要保护一个页面,以便只有某些用户可以访问它。由于页面中使用了 javascript 库,它只有在通过 HTTP 提供服务时才能正常工作,但除非通过 HTTPS 提供页面,否则 ASP.NET 身份验证将不允许访问。
为了限制对安全页面的访问,我在包含该页面的文件夹中添加了一个 Web.config 文件:
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<allow roles="Map Viewer" />
<deny users="*" />
</authorization>
</system.web>
</configuration>
主 web.config 文件设置表单身份验证。
<authentication mode="Forms">
<forms loginUrl="~/account/login/"
requireSSL="true"
timeout="2880" />
</authentication>
如果您通过 https 访问受保护的页面(例如https://example.com/Map),这就像一个魅力。系统会提示您登录,输入您的凭据,然后转到该页面。如上所述,如果通过 http 提供该页面将无法正常工作。但是,ASP.NET 身份验证/授权不允许您访问它: 1.如果您没有登录并尝试通过http访问该页面,您将在登录后被重定向到站点主页。 2. 如果您已登录并尝试通过 http 访问该页面,即使您已经登录,也会显示登录屏幕。
网站上没有其他安全页面需要 HTTP 才能正常工作,并且这种基于表单的身份验证过程多年来一直对这些页面运行良好。
【问题讨论】:
-
为什么javascript库需要HTTP?我对此持怀疑态度,但如果这是真的,你应该解雇那个图书馆并找到一个替代品。
-
link 不通过 HTTPS 为他们的库提供服务——它回退到 HTTP。我尝试将 JS 库复制到我的服务器,但该库加载的地图图块也不会通过 HTTPS。
-
对我来说,放弃 CartoDB 就足够了,因为他们似乎并不重视安全
-
我对其他有此问题的用户的建议是考虑使用 ASP.NET MVC,它允许用户更轻松地从 HTTPS 迁移到 HTTP。请注意,这具有安全隐患!如果恶意用户能够窃听连接,他们可能会通过窃取您的 cookie 值来劫持您的会话。
标签: asp.net