【问题标题】:forms authentication, not able to save web.config programmatically表单身份验证,无法以编程方式保存 web.config
【发布时间】:2011-02-24 10:06:12
【问题描述】:

我使用Visual Studio 2008。在我的项目中我使用表单身份验证,我的项目结构如下

root
 |
 login.aspx
 home.aspx
 web.config
 admin (folder)
  |
  admin.aspx
  web.config

这里的root web.config如下

<authentication mode="Forms">
  <forms name="Authen" protection="All" timeout="60" loginUrl="Login.aspx" enableCrossAppRedirects="true" cookieless="AutoDetect"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

在内部 web.config 中


我的用户是 用户名角色 admin1 管理员 admin2 管理员 user1 用户 user2 用户

您可以在第二个 web.config 中看到,我授予具有“Admin”角色和“user1”用户的用户访问权限。

为了访问“admin”文件夹,我写了以下内容:

        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/HR");
        SystemWebSectionGroup systemWeb = (SystemWebSectionGroup)config.GetSectionGroup("system.web");
        AuthorizationSection section = (AuthorizationSection)systemWeb.Sections["authorization"];

        AuthorizationRule newRule = new AuthorizationRule(AuthorizationRuleAction.Allow);
        newRule.Users.Add("user1");
        section.Rules.Add(newRule);

并将 web.config 保存为

        config.Save();

当我从 Visual Studio 开发服务器运行它时,它工作正常,当我在 IIS 中托管它时,我收到以下错误

配置错误 说明:处理服务此请求所需的配置文件期间发生错误。请查看下面的具体错误详细信息并适当地修改您的配置文件。

解析器错误消息:加载配置文件时出错:访问路径“F:\dotnet\samples\myproj\UI\hr\f-q_g-yn.tmp”被拒绝。

来源错误:

[没有相关的源代码行]

源文件:F:\dotnet\samples\myproj\UI\hr\web.config 行:0

这里的问题是,它无法保存 web.config

我有一个解决办法,就是我加了

<identity impersonate="true" userName="myusername" password="mypassword"/>

root web.config,它工作正常。但我的老板说这不是正确的方法。解决这个问题的正确方法是什么? 请帮忙

【问题讨论】:

    标签: asp.net forms authentication


    【解决方案1】:

    运行您的网站的帐户无权写入您的 web.config 所在的目录。有两种解决方法:

    1. 在另一个确实具有所需权限的帐户下运行您的网站。您在 IIS 管理器中相应应用程序池的设置中设置帐户。
    2. 修改目录的安全设置 (ACL),并为运行您的应用程序池的用户添加写入权限。

    您可能应该将这两种方法结合起来——使用单独的用户帐户并将写入权限仅添加到该帐户,而不是例如网络服务。

    (但请注意,我不确定网站修改自己的 web.config 文件是否是个好主意。)

    【讨论】:

    • 我也不认为这是个好主意。当 Web.config 被修改时,应用程序将重新启动。这可能会产生一些不必要的副作用。
    • 那么我必须检查用户是否有权访问特定文件夹中的页面。这会导致大量编码。不是吗。那么表单认证有什么用呢??
    • @Harsha - 你想达到什么目的?启用/禁用用户对各种页面/文件夹的访问通常通过将用户分配给相应的 roles 并要求 web.config 中的 role 来完成,而不是列出所有那里允许的用户。参见例如MSDN
    • @Mormegil - 你是对的,但我的要求是允许角色“USR”的特定用户访问名为“Manager”且角色“MGR”的文件夹中的页面。我如何做到这一点?
    • @Harsha - 添加他(暂时?)另一个角色,例如"UPGRADEDUSR" 并允许管理器文件夹中的角色。
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多