【问题标题】:How to programatically accomplish url authorization in iis7 for an application?如何以编程方式在 iis 7 中为应用程序完成 url 授权?
【发布时间】:2018-01-11 13:41:57
【问题描述】:

我创建了一个 ftp 站点“TestFtpSite”和一个路径为“/LocalUser/demor”的应用程序。这是ApplicationHost.config中的配置。

<site name="TestFtpSite" id="3">
            <application path="/" applicationPool="TestFtpPool">
                <virtualDirectory path="/" physicalPath="F:\empty-ftp-folder" />
            </application>
            <application path="/LocalUser/demor" applicationPool="TestFtpPool">
                <virtualDirectory path="/" physicalPath="F:\HJ_STORAGE\demor" />
            </application>
            <bindings>
                <binding protocol="ftp" bindingInformation="*:21:" />
            </bindings>
            <ftpServer>
                <security>
                    <ssl controlChannelPolicy="SslAllow" dataChannelPolicy="SslAllow" />
                    <authentication>
                        <basicAuthentication enabled="true" />
                    </authentication>
                </security>
                <userIsolation mode="IsolateAllDirectories">
                    <activeDirectory />
                </userIsolation>
            </ftpServer>
        </site>

阅读understanding-iis-url-authorization后,我发现我们可以在ApplicationHost.config文件中添加location标签来保护应用程序。但是我找不到任何代码 sn-p 或 api 关于如何实用地将带有授权规则的 location 标记添加到配置文件中。
我想用 C# 务实地实现以下目标。

<location path="TestFtpsite/LocalUser/Bob"> 
    <system.ftpServer> 
        <security> 
            <authorization> 
                <clear />
                <add accessType="Allow" users="Bob" permissions="Read, Write"/>                  
            </authorization> 
        </security> 
    </system.ftpServer> 
</location> 

-------------更新----------

终于在programmatically-unlocking-iis-configuration-sections-in-powershell的启发下解决了

这是我的解决方案,希望对某人有所帮助。

        // be sure to reference Microsoft.Web.Administration firstly
        ServerManager sm = new ServerManager();
        Configuration config= sm.GetApplicationHostConfiguration();

        /*************************
         * Unlock the section
         * ***********************/
        ConfigurationSection section = config.GetSection("system.ftpServer/security/authorization", "TestFtpSite/LocalUser/demor");
        section.OverrideMode = OverrideMode.Allow;
        sm.CommitChanges(); 

        // Get a new instance of the configuration object
        config = sm.GetApplicationHostConfiguration();
        section = config.GetSection("system.ftpServer/security/authorization", "TestFtpSite/LocalUser/demor");
        ConfigurationElementCollection authCollection = section.GetCollection();

        ConfigurationElement clearElement = authCollection.CreateElement("clear");
        authCollection.Add(clearElement);

        ConfigurationElement addElement =  authCollection.CreateElement("add");
        addElement.SetAttributeValue("accessType", "Allow");
        addElement.SetAttributeValue("users", "demor");
        addElement.SetAttributeValue("permissions", "Read, Write");
        authCollection.Add(addElement);

        sm.CommitChanges(); 

【问题讨论】:

标签: c# iis authorization


【解决方案1】:

使用授权属性。用法取决于所使用的技术,但对于 MVC,您可以将其放在控制器或类似这样的操作上。

[Authorize(Users="Bob")]
public ActionResult LocalUser()
{
    . . .
}

【讨论】:

  • 我在 Microsoft.Web.Administration.dll 中使用服务器管理器来管理我的 ftp 站点。如果我添加了一个应用程序,那么配置文件会反映更改。我的意思是如何实用地将带有授权规则的位置标签添加到配置文件中,以使用路径“/TestFtpSite/LocalUser/Bob”保护我的应用程序。有什么想法吗?
猜你喜欢
  • 2018-11-22
  • 2011-01-10
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-16
相关资源
最近更新 更多