2012-02-22 93 views
0

我有一个ASP.NET应用程序,其中大部分页面都可通过单一登录模块(可将用户名设置为Session数组变量)的所有经过身份验证的用户访问。现在我有一个文件夹A包含一个B.aspx页面和一个允许访问该页面B.aspx的用户名单。ASP.NET单页面授权

我的问题:我如何优雅地授权这一个页面的这些用户,或更好的,这个文件夹。可以使用文件夹A中的Web.config文件中的位置标记完成吗?如果是这样,我如何将该配置与自定义代码连接以检查存储在会话变量中的用户名是否是该文件夹或页面的授权用户之一?我可以使用自定义membershipprovider吗?

在此先感谢!

回答

0

首先,由于会话cookie中的用户名不是一种处理此问题的好方法,因此会废弃这种已被克服的安全方法。好吧,也许有点太过分了,因为低安全性可能适合你。如果是这样,您可以为检查用户名并与可更新列表进行比较的页面编写自定义处理程序。

新增:使用会话对象,您会更安全一些,因为会话令牌已发送并且名称保留在会话中,但Membership位(下方)会处理特定会话的翻译而不会重写与您的自定义“此用户正在使用此会话”方法。是的,最终你可以争辩说微软做了一些与你的软件非常相似的东西,但是你将维护工作留给了他们。

回到我原来的方向,内置ASP.NET的角色和成员资格的概念。如果您使用这些位,则可以通过设置具有安全限制的新web.config,将安全修剪页面(或者甚至更好的文件夹,以便您可以添加页面)给某些用户(不是很好)或角色(更好)。

关于内置的东西很酷的事情是你可以声明性地设置安全性,并让管道确定用户是否有效,而不需要任何繁重的工作。

关于各种面向ASP.NET的网站上的成员资格和角色信息有很多。

+0

对不起,我不是指会话cookie,而是服务器端会话对象。此外,我找到的所有在线文档都使用表单进行身份验证。我的身份验证已经由外部模块处理,因此我在本站点上寻找解决方案的帖子... – Chris 2012-02-22 22:06:00

+0

这是我的不好。加了一点。它仍然是购买与构建的核心概念,即使“价格”是0美元,就像.NET一样(可以争论它是免费的,如啤酒,还是免费的,就像在演讲中一样,后来;-))。会话变量的问题是你必须自己控制安全位。没有正确完成,你最终会遇到硬编码。另一件事,你自己处理页面文件夹的特定配置会更困难,而Membership是内置的。而且,如果你使用站点地图,你可以修剪菜单,所以没有权限的用户在他们的菜单中没有选项。而且,您不必编写该代码。 – 2012-02-22 22:13:19

0

可以实现指定用户的名称,可以访问由逗号分隔的目录。

+1

<位置路径= “路径名”> <授权> <允许用户= “马修,萨拉”/> 2012-02-23 01:49:41

+0

由于Nudier。我已经得到了那么多。我被卡住的地方是如何控制决定当前用户是否是列表中某个名称的机制,因为这些信息存储在服务器的会话对象中。 – Chris 2012-02-23 07:05:05

0

当您的用户名不脱在web.config中罚款,而不是在某些会话变量中定义,您必须为此例如创建表单身份验证票证。

FormsAuthenticationSupport formsAuthenticationSupport = new FormsAuthenticationSupport(); 
formsAuthenticationSupport.SignIn(UsernameInSession, RoleName, true); 

现在您可以在web.config中为UsernameInSession设置身份验证规则和位置标记。