Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET单页授权_C#_Asp.net_Authentication_Authorization - Fatal编程技术网

C# ASP.NET单页授权

C# ASP.NET单页授权,c#,asp.net,authentication,authorization,C#,Asp.net,Authentication,Authorization,我有一个ASP.NET应用程序,所有经过身份验证的用户都可以通过一个登录模块访问大部分页面,该模块将用户名设置为会话数组变量。现在我有一个文件夹A,其中包含一个页面B.aspx和一个允许访问此页面B.aspx的用户名列表 我的问题是:如何优雅地只授权这些用户访问这一页,或者更好地访问这一文件夹。是否可以使用文件夹a中Web.config文件中的位置标记来完成?如果是,我如何用自定义代码连接该配置,以检查会话变量中存储的用户名是否是该文件夹或页面的授权用户名之一?我可以使用自定义会员资格提供商吗

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

我的问题是:如何优雅地只授权这些用户访问这一页,或者更好地访问这一文件夹。是否可以使用文件夹a中Web.config文件中的位置标记来完成?如果是,我如何用自定义代码连接该配置,以检查会话变量中存储的用户名是否是该文件夹或页面的授权用户名之一?我可以使用自定义会员资格提供商吗


提前谢谢

首先,您放弃了笨拙的安全方法,因为会话cookie中的用户名不是处理此问题的好方法。好吧,可能有点太过火了,因为低安全性对你来说可能没问题。如果是这样,您可以为页面编写一个自定义处理程序,用于检查用户名并与可更新列表进行比较

新增:使用Session对象,您的安全性会提高一点,因为会话令牌会被发送过来,名称会保留在会话中,但成员身份位(如下)会将特定会话转换为用户,而无需使用自定义的“此用户正在使用此会话”方法重写。是的,最终你可以说微软做了一些与你的软件非常相似的事情,但是你把维护工作留给了他们

回到我最初的方向,ASP.NET中内置了角色和成员的概念。如果您使用这些位,您可以通过设置具有安全约束的新web.config,将页面(或更好的文件夹)安全修剪为特定用户(不太好)或角色(更好)

内置功能的酷之处在于,您可以声明式地设置安全性,并让管道确定用户是否有效,而无需您承担任何繁重的工作


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

可以通过指定用户名来实现,用户名可以通过逗号单独访问目录


由于您的用户名未在web.config中定义,而是在某些会话变量中定义,因此您必须为此创建表单身份验证票证,例如

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

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

对不起,我指的不是会话cookie,而是服务器端会话对象。此外,我找到的所有在线文档都使用表单进行身份验证。我的身份验证已经由一个外部模块负责,因此我在这个网站上发布了寻找解决方案的帖子……这是我的错。加了一点。它仍然是“买还是造”的核心概念,即使“价格”是0美元,比如.NET(可以争论它是免费的,比如在啤酒中,还是免费的,比如在以后的演讲中;-))。会话变量的问题是您必须自己控制安全位。如果做得不正确,最终会导致硬编码。另一件事是,在成员资格内置的情况下,自己处理页面文件夹的特定配置更为困难。而且,如果您使用sitemap,您可以修剪菜单,因此未经许可的用户在其菜单中没有该选项。而且,您不必编写这些代码。谢谢你,努迪埃。我已经走了那么远。我陷入困境的是如何控制决定当前用户是否是列表中的一个名称的机制,因为这些信息存储在服务器的会话对象中。