我正在构建一个包含成员页面的ASP.NET网站。我创建了一个文件夹,用于保存成员页面,只能通过登录或创建新帐户来访问。问题是如何使这些成员页面的URL安全,以便有人不能简单地将URL提供给另一个用户,以便他们复制到浏览器或书签中。任何建议都非常感谢。
答案 0 :(得分:0)
您可以通过web.config中的Authentication元素执行此操作。
http://support.microsoft.com/kb/316871有详细说明,但大致你会添加如下内容:
<location path="subdir1">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
这将拒绝所有匿名用户访问该子目录。
引用上面的MSDN页面:
使用基于表单的身份验证时 仅在ASP.NET应用程序中 经过身份验证的用户被授予访 到应用程序中的页面。 未经身份验证的用户 自动重定向到页面 由loginUrl属性指定 他们可以在哪里使用Web.config文件 提交他们的证书。在一些 例如,您可能希望允许用户访问 访问应用程序中的某些页面 无需身份验证。
修改
为了响应您对测试用户页面的编辑,我可以通过两种方式来思考这可能有用。如果该页面特定于给定用户,那么您可以确保在代码中而不是从您查找的URL中获取用户详细信息,并向他们提供他们的页面。例如,如果您当前正在查看members / mypage.aspx?user = bob,那么只需链接到members / mypage.aspx,然后在代码中获取要使用的登录用户的名称。然后就没有办法告诉代码你想要Bob的页面而不是Bob。
如果您有可以查看页面的用户组(例如管理员),则需要在页面上放置一些代码来检查权限。对于给定的页面,您需要找出谁可以以某种方式查看它(例如,通过查看该页面与允许的用户角色以获取角色列表),然后检查登录用户是否在谁可以查看的列表中(用户是否具有这些角色之一。
例如Bob是管理员而Frank不是。进入admin.aspx页面时,首先查找admin.aspx并找出允许Admin和SuperAdmin查看角色的角色。然后,您可以查找已登录的用户并迭代他们的角色,直到您在允许的角色列表中找到一个。如果您发现一个进程正常,那么如果您没有,那么重定向到其他地方或抛出异常(例如抛出您自己的MyAccessDeniedException,它会被捕获到您的全局事件处理程序中并显示一条消息,说明用户没有权限)。
所有这些都可以在页面的基类中完成,以防止您必须在每个页面上包含代码。也就是说,您可以创建继承自Page的MyPage以及MyPage运行此安全检查的onload(或oninit或您想要的任何地方)。然后,您网站的所有页面都从MyPage而不是Page继承,您立即获得所有页面上的功能。
希望这能回答你的问题。
答案 1 :(得分:0)
在web.config中,您需要为仅允许的用户指定此文件夹。
要授予个人安全性(针对人),只需添加检查(例如在Page_Load),允许该成员查看此页面并使用代码403(禁止)抛出HttException