Web.config 允许特定用户进行位置访问

2023-11-25

我有一个网络服务器,用户可以从其中下载特定于每个用户的文件。为了确保每个用户只能下载自己的文件,他们必须通过以下方式进行身份验证基本身份验证。因此,对于每个用户,服务器上都有一个 Windows 帐户,该帐户具有对用户特定文件夹的读取权限。

现在我想将此功能移至另一台服务器。我不想为用户创建 Windows 帐户,但仍保留基本身份验证。所以我用自定义基本身份验证 HTTP 模块结合一个自定义会员提供商这让我可以在 web.config 中定义用户。

身份验证工作得很好,但使用任一登录后jack or jill(请参阅 web.config)我可以访问这两个位置Dir1 and Dir2。如果我注释掉也会出现这种情况<allow users="jack" />位置标签中的一部分。

附加信息: 我创建了一个 Default.aspx 文件并添加了一个

<% Response.Write(HTTPContext.Current.User.Identity.Name) %>

它根据登录者返回正确的用户名。

<% Response.Write(HTTPContext.Current.User.Identity.IsAuthenticated) %>

返回 True。

我只需要做什么jack能够访问(=从中下载文件)Dir1并且只有jill能够访问(=从中下载文件)Dir2但反过来不是吗?

编辑:我尝试为每个子目录添加 web.config 文件,而不是 utkai 提到的位置标签 - 具有相同的结果。每个用户都可以访问任何目录。

这是我的 Web.config 文件:

<configuration>
<system.webServer>
    <modules>
        <add name="CustomBasicAuthentication" type="LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule, LeastPrivilege.CustomBasicAuthenticationModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=F20DC168DFD54966"/>
    </modules>

    <security>
        <authentication>
            <customBasicAuthentication enabled="true" realm="TEST" providerName="AspNetWebConfigMembershipProvider" cachingEnabled="true" cachingDuration="15" requireSSL="false"/>
        </authentication>
        <authorization>
            <deny users="?" />
        </authorization>
    </security>
</system.webServer>

<system.web>
    <membership defaultProvider="AspNetWebConfigMembershipProvider">
        <providers>
            <add name="AspNetWebConfigMembershipProvider" type="LeastPrivilege.AspNetSecurity.Samples.WebConfigMembershipProvider, WebConfigMembershipProvider"/>
        </providers>
    </membership>

    <authentication mode="Forms">
        <forms>
            <credentials passwordFormat="Clear">
                <user name="jack" password="jack"/>
                <user name="jill" password="jill"/>
            </credentials>
        </forms>
    </authentication>

    <authorization>
        <deny users="?" />
    </authorization>
</system.web>

<location path="Dir1" allowOverride="false">
    <system.web>
        <authorization>
            <!-- <allow users="jack" /> -->
            <deny users="*" />
        </authorization> 
    </system.web>
</location>

<location path="Dir2"  allowOverride="false">
    <system.web>
        <authorization>
            <!-- <allow users="jill" /> -->
            <deny users="*" />
        </authorization> 
    </system.web>
</location>
</configuration>

更新#3

您可以启用 URLAuthorization 以强制 IIS 保护 IIS 中通常不处理的文件。这里的解决方案依赖于 IIS 7.x 并使用集成管道。

<system.webServer>
    <modules>
        <add  name="FormsAuthenticationModule"  type="System.Web.Security.FormsAuthenticationModule" />
        <remove  name="UrlAuthorization" />
        <add  name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
        <remove  name="DefaultAuthentication" />
        <add  name="DefaultAuthentication"  type="System.Web.Security.DefaultAuthenticationModule" />
    </modules>
</system.webServer>

更新#2您只需删除已添加的自定义内容并执行以下操作即可完全切换到表单身份验证。

我实际上测试过这个,它只允许jack in to dir1 and jill in dir2。两者都可以访问根目录。

如果这不起作用,我们将需要讨论您的更多设置。

网络配置

<?xml version="1.0"?>
<configuration>
<system.webServer>
    <modules>
        <add  name="FormsAuthenticationModule"  type="System.Web.Security.FormsAuthenticationModule" />
        <remove  name="UrlAuthorization" />
        <add  name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
        <remove  name="DefaultAuthentication" />
        <add  name="DefaultAuthentication"  type="System.Web.Security.DefaultAuthenticationModule" />
    </modules>
</system.webServer>
    <system.web>
        <authentication mode="Forms">
            <forms loginUrl="Login.aspx" defaultUrl="Default.aspx">
                <credentials passwordFormat="Clear">
                    <user name="jack" password="jack" />
                    <user name="jill" password="jill" />
                </credentials>
            </forms>
        </authentication>
        <authorization>
            <deny users="?"/>
        </authorization>
        <compilation debug="true"></compilation>
        <customErrors mode="Off"/>
    </system.web>
    <location path="dir1">
        <system.web>
            <authorization>
                <allow users="jack" />
                <deny users="*, ?" />
            </authorization>
        </system.web>
    </location>
    <location path="dir2">
        <system.web>
            <authorization>
                <allow users="jill" />
                <deny users="*, ?" />
            </authorization>
        </system.web>
    </location>
</configuration>

登录.aspx- 您必须添加来自登录控件的重定向,否则表单身份验证将在 App_Code 目录中查找不存在的数据库。

<asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate">
</asp:Login>

登录.aspx.cs

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        string username = Login1.UserName;
        string password = Login1.Password;
        if (FormsAuthentication.Authenticate(username, password))
        {
            FormsAuthentication.RedirectFromLoginPage(username, false);
        }
    }

更新#1

我浏览了您作为自定义基本身份验证 HTTP 模块链接的示例,然后继续执行HTTP 模块它的最底部有一个指向其他来源的链接。

该源有一个使用自定义基本身份验证的会员提供程序示例。我觉得您在 web.config 中混入 Forms 会员资格提供程序时遇到了麻烦。

当您开始进行自己的单独身份验证时,事情进展并不顺利,您通常需要添加自己的所有内容。

这段代码可以从我这边的附加链接开始工作。

作为一种额外的可能性,如果您想让 ASP.NET 本身处理所有成员资格并且您使用 SQL 来存储所有内容,请考虑查看http://weblogs.asp.net/sukumarraju/archive/2009/10/02/installing-asp-net-membership-services-database-in-sql-server-expreess.aspx查看如何使用向导在 SQL 中进行设置。

内置的成员身份将是表单身份验证,并且比使用自定义身份验证要少得多。

以前的版本

我从来没有幸运地使用过<location>标签,所以我只是将新的 web.configs 放入目录中。当我不在子文件夹中排除匿名时,我也遇到了麻烦。这似乎是浏览器默认为匿名,可以通过

我是这样做的。

根 web.config

<system.web>
    <authorization>
        <allow roles="AccessRole1, AccessRole2" users="domain\jack, domain\jill"/>
        <deny users="*, ?" /> <!-- make sure you deny anonymous with '?' -->
    </authorization>
</system.web>

子目录web.config。确保您明确拒绝所有其他用户。如果您不拒绝所有其他用户,他们仍然可以进入。

<?xml version="1.0"?>
<configuration>
    <system.web>
        <authorization>
            <allow users="domain\jill" />
            <deny users="*, ?"/> <!-- explicitly deny all others, including anonymous -->
        </authorization>
    </system.web>
</configuration>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web.config 允许特定用户进行位置访问 的相关文章

  • 如何正确编码 mailto 链接?

    我正在生成一些 HTML 并且我想生成 XSS 和数据库内容安全的mailto关联 这里使用的正确编码是什么 这个怎么样 myLiteral Text string Format mailto 0 Content Type text htm
  • Razor 与 ASPX 语法的比较 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近 我开始研究 MVC3 和 Razor 并阅读了几篇有关这些主题的文章 以更好地理解这个概念 我一直在读Scott Guthrie 的博客文
  • WCF服务库项目找不到对其他项目的引用

    我的解决方案中有两个项目 MyApp Domain 和 MyApp WebService MyApp WebService 是一个 WCF 服务库 我想使用 MyApp Domain 中的一些实用函数 因此 在 MyApp WebServi
  • Dictionary(Of String, String) 和 IDictionary(Of String, String) 有什么区别

    我可以用 IDictionary 做更多或更少的事情吗 这两个集合有何不同 IDictionary 只是一个接口 一个描述实现类必须执行的操作的契约 Dictionary 是一个实现该接口的具体类 因此必须提供 IDictionary 接口
  • 处理多种权限类型的最佳方法是什么?

    我经常遇到以下场景 我需要提供许多不同类型的权限 我主要使用 ASP NET VB NET 和 SQL Server 2000 Scenario 我想提供一个可以处理不同参数的动态权限系统 假设我想授予某个部门或特定人员访问应用程序的权限
  • ASP.net,将对象添加到会话变量

    我正在尝试跨回发将对象添加到会话变量中 我的代码类似于以下内容 Supply sup Supplies GetSupply supplyItemID Session CartObjects sup 现在 编译器会抛出一个错误 指出 运算符不
  • Windows 共享主机 - 自定义计划任务

    我有一个 Windows 共享主机 我需要每天运行一些预定的 C 可执行文件来创建站点地图 发送新闻通讯等 提供商告诉我 出于安全原因 我无法运行可执行文件 我能做什么 提供商建议我购买 VPS 但认为仅仅为了运行一些计划任务而花更多钱是没
  • 浏览器收集哪些值作为回发数据?

    当页面被发送回服务器时 浏览器收集每个控件的当前值并将其粘贴到一个字符串中 然后 该回发数据通过 HTTP POST 发送回服务器 Q1 除了控件的 Text 属性和 SelectedIndexchanged 因此除了用户输入数据 之外 控
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • Skype API 的实现[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的 Skype 插件 https stackoverflow com questions 1149615 skype addon in c sharp 如何在 C 中实现 Skype API 来
  • asp.net 页面的 preinit 事件

    我是 ASP NET 新手 我有一个 aspx 页面 我必须在其 PreInit 事件中编写一些代码 从我在页面上找到 PreInit 事件的地方 当我们双击按钮来获取按钮单击事件 或从属性窗格中选择按钮并选择事件 请尽快回复我 老兄 你为
  • 非泛型类型“IdentityUser”不能与类型参数一起使用

    我正在尝试向我的 MVC 项目添加身份 我想用一个int作为我的钥匙而不是string 当我尝试以下操作时 我收到此错误 public partial class AppUser Microsoft AspNet Identity Enti
  • System.MissingMethodException:找不到方法?

    以前工作的 ASP NET WebForms 应用程序现在抛出此错误 System MissingMethodException 找不到方法 The DoThis方法位于同一个类上 它应该可以工作 我有一个这样的通用处理程序 public
  • 第一次在更新面板中自动将文件上传到服务器不起作用

    要求 我正在尝试在用户选择文件后立即上传该文件 我必须满足以下要求 该按钮看起来与应用程序中的其他按钮类似 用户选择文件后就会上传该文件 我需要它位于 UpdatePanel 中 因为我必须对页面进行有条件的更新 我CAN对所选文件进行完整
  • 如何为连接范围变量编写动态 where 子句

    我一直在使用 LINQ 进行查询 但遇到了动态 where 子句的问题 我想检查一个条件 如果为真 则将其添加到我的查询中 问题在于 where 正在使用我的连接之一中的范围变量之一 我的工作查询如下 var query from proj
  • 在 ASP.NET Anypostback 之前做一些 javascript

    我想在页面回发之前用 javascript 做一些事情 如何在任何 ASP NET 回发之前运行 JavaScript 函数 form submit function alert hello 这不起作用 我找到了方法 在ASP NET 论坛
  • 用于动态视图数据/表单的 ASP.Net MVC 编辑器模板

    我正在实现一个 MVC3 Razor Web 应用程序 该应用程序检索用户可以从其他服务编辑的一些 字段 因此要在视图中编辑的属性列表是完全动态的并且在编译时未知 我编写了一些部分视图和 HTML 帮助程序 它们循环从其他服务检索到的组和属
  • 字节数组到 Excel 工作簿

    我正在尝试将字节数组转换为 Excel 工作簿 当我这样做时 Response BinaryWrite renderedBytes 它工作正常并且文件符合预期 但是当我尝试用我在网上找到的这个来做到这一点时 private Object B
  • 在 ASP.NET MVC 3 应用程序中设置 ashx 处理程序的自动化规则

    我正在 MVC 3 应用程序中实现 javascript 文件上传功能 因此我需要使用 Http 处理程序 ashx 来允许大文件上传 现在我需要以某种方式禁止未经身份验证的用户调用处理程序的方法 如果我有一个控制器 我只需对其应用 Aut
  • 我如何请求“publish_actions”权限?

    华盛顿邮报 https www facebook com dialog permissions request app id 225771117449558 display page next https 3A 2F 2Fapps face

随机推荐

  • Java中如何检查线程是否已经启动? [复制]

    这个问题在这里已经有答案了 我正在上一堂延伸课Thread 我会在某个时候启动线程 一段时间后我需要检查该线程是否已经启动 这样我就可以在该特定点启动线程 我的线程类将是 public class BasicChatListener ext
  • java版本错误,无法升级jenkins

    我的 Ubuntu 14 04 上运行着 Jenkins 我正在尝试使用正常的方式升级 jenkinsapt get install jenkins 但是当我尝试这样做时 我不断收到错误 Setting up jenkins 2 73 Fo
  • 如何从 NIB 读取 UITableViewCell(子类)的高度?

    我在 NIB 中定义了一个 UITableViewCell 实际上是一个子类 在 NIB 中 我将框架高度设置为 183 还将 行高 设置为 183 并勾选了自定义 在我最初的问题中 这里一切都出了问题 看起来我得到了错误的高度 单元格加载
  • 使用 1 个选项取消选择“多选”中的所有选项

    我目前有以下js代码 function clearMulti option var i var select document getElementById option parentNode id for i 1 i
  • 在 Spring Data Rest 中修改 @OneToMany 实体而不使用其存储库

    在我的项目中我使用对象类型A与类型的对象具有 OneToMany 关系 orphanRemoval true cascade CascadeType ALL fetch FetchType EAGER B 我需要 SpringDataRes
  • 如何向 API 提供“回调”? [复制]

    这个问题在这里已经有答案了 我正在读一些模块文档在方法参数的解释中看到一些我不明白的东西 callback 将使用参数调用的回调函数 列表等于callbackargs result 计算完成后 callbackargs 回调函数的附加参数
  • 如何更改 R 中的分辨率(或重新网格)数据

    我有一个数据集 其中包含 lon lat 和涵盖 1961 年至 1970 年的月平均变量 例如温度或降水 该数据集的分辨率为 0 5 x 0 5 度经 纬度 覆盖整个地球 并以 我使用 R 提取数据的 NC 文件 library ncdf
  • 如何将控制台输出写入cpp中的文本文件?

    我正在尝试将控制台数据写入 cpp 中的单独文本文件中 任何人都可以帮我提供示例代码 有多种方法可以做到这一点 您可以使用以下命令从命令行重定向它programname gt out txt 或者你可以使用freopen out txt w
  • 制作不重叠的气泡图

    我目前正在尝试在 Matplotlib 中制作气泡图 其中气泡不重叠 因此将圆圈 气泡包装在图表中 大约像 我认为可能有效的方法 使用 x 1 y 1 绘制第一个数据点 通过计算给定标量值的气泡半径来随机绘制其他数据点以避免重叠 The f
  • 有关 JFreeChart 叠加的帮助

    我遇到了 JFreeChart 重叠图的问题 我正在使用 JFreeChart 1 0 13 我想要做的事情似乎在 JFreeChart 的早期版本中更容易做到 该图显示折线图和条形图 折线图绘制的 Y 轴数据范围为 0 100 范围 条形
  • 如何简化嵌套map调用?

    假设我有一些嵌套函子 例如List Option Int 并需要致电map最内在的一个 现在我正在使用嵌套maps scala gt val opts List Option Int List Some 0 Some 1 opts List
  • nodemailer 无效登录:535 身份验证失败

    我正在尝试在我的节点应用程序中使用nodemailer npm 包 通过联系页面发送电子邮件 它给我这个 535 身份验证失败错误 但我可以向您保证我的电子邮件和密码绝对正确 var express require express var
  • Rails 3 自动资产部署到 Amazon CloudFront?

    Rails 3 1 中是否有可用的 gem 或方法可以自动将资产上传到亚马逊云前端并使用这些资产而不是提供本地托管的资产 我想手动上传编译的资产然后更改 Rails 应用程序配置以使用该资产主机很容易 但是当修改资产时 需要再次手动上传到云
  • 设置 templateLocation 参数时数据流作业运行失败

    当我传递参数暂存 临时和输出 GCS 存储桶位置时 数据流作业失败并出现以下异常 Java代码 final String used Arrays copyOf args args length 1 used used length 1 pr
  • 防止在 Vim 中打开 NERDTree 或 MiniBuffExplorer 窗口内的文件

    我发现自己在 Vim 中打开了错误的窗口 有时是 NERDTree 或 MiniBuffExplorer 这真的让我很失望 我确信这种情况正在发生 因为我的光标错误地聚焦在这些窗口之一内 但是有什么我可以添加到我的 vimrc文件来防止这种
  • Postfix - 如何处理传入的电子邮件? [关闭]

    Closed 这个问题是无关 目前不接受答案 有人知道如何在 postfix 中处理虚拟邮箱的传入电子邮件吗 我正在构建 Web 应用程序 用户通过向应用程序发送电子邮件来添加新内容 每个用户使用的电子邮件地址是自定义的 例如 电子邮件受保
  • 在 Qt 中将 C++ 对象公开给 Javascript

    有什么方法可以将 C 对象 函数公开给 Qt 中 QtWebKit 浏览器内运行的 JavaScript 可以将 ActionScript 对象公开给在 Adob e AIR 中的 WebKit 浏览器内运行的 JS 代码 我正在 Qt 中
  • 在段落中放置表情符号而不影响“行高”

    如何在不影响段落内容的情况下插入表情符号line height不管表情有多大 IE 喜欢 我得到的最接近的是position absolute or vertical align text top 其中没有一个能完成这项工作 p img h
  • jQuery:获取从 中选择的文件名

    这段代码应该可以工作in IE 甚至不要在 Firefox 中测试它 但事实并非如此 我想要的是显示附件的名称 有什么帮助吗
  • Web.config 允许特定用户进行位置访问

    我有一个网络服务器 用户可以从其中下载特定于每个用户的文件 为了确保每个用户只能下载自己的文件 他们必须通过以下方式进行身份验证基本身份验证 因此 对于每个用户 服务器上都有一个 Windows 帐户 该帐户具有对用户特定文件夹的读取权限