我有一个ASP.NET应用程序,其中大多数页面都可以通过单点登录模块访问所有经过身份验证的用户,该模块将用户名设置为Session数组变量。现在我有一个包含一页B.aspx的文件夹A和一个允许访问此页面的用户名列表B.aspx。
我的问题:对于这一个文件夹,我如何只为这一页或更好的页面优雅地授权这些用户。是否可以使用文件夹A中的Web.config文件中的位置标记来完成?如果是这样,我如何将该配置与自定义代码连接,以检查存储在会话变量中的用户名是否是该文件夹或页面的授权用户之一?我可以使用自定义membershipprovider吗?
提前致谢!
答案 0 :(得分:0)
首先,您废弃了kludged安全方法,因为会话cookie中的用户名不是处理此问题的好方法。好吧,也许有点太落伍了,因为低安全性对你来说可能没问题。如果是这样,您可以为检查用户名的页面编写自定义处理程序,并与可更新列表进行比较。
新:使用Session对象,您会更安全,因为会话令牌被发送并且名称保留在会话中,但是成员资格位(下面)处理特定会话到用户的转换而不用重写您的自定义“此用户正在使用此会话”方法。是的,最终你可以说微软会做一些与你的软件非常相似的事情,但你会把维护留给他们。
回到我原来的方向,ASP.NET中内置了角色和成员资格的概念。如果您使用这些位,则可以通过设置具有安全性约束的新web.config来对页面(或甚至更好的文件夹,以便您可以添加其他页面)进行安全修整,以使某些用户(不那么好)或角色(更好)。 / p>
关于内置内容的一个很酷的事情是,您可以声明性地设置安全性并让管道确定用户是否有效,而不需要任何繁重的工作。
有很多关于各种面向ASP.NET的站点上的成员资格和角色的信息。
答案 1 :(得分:0)
可以通过逗号分隔指定可以访问目录的用户名。
答案 2 :(得分:0)
由于您的用户名未在web.config中定义而是在某个会话变量中定义,因此您必须为此创建表单身份验证票证。
FormsAuthenticationSupport formsAuthenticationSupport = new FormsAuthenticationSupport();
formsAuthenticationSupport.SignIn(UsernameInSession, RoleName, true);
现在,您可以在web.config中为UsernameInSession设置身份验证规则和位置标记。