【问题标题】:Reading configuration section from a restricted appdomain从受限制的应用程序域中读取配置部分
【发布时间】:2013-07-02 14:07:16
【问题描述】:

我在已签名的程序集 A 中定义了一些配置部分,用于加载其自己的配置文件的应用程序域,由程序集 A 创建。

加载的程序集 B 不是完全信任的应用程序。

所有程序集都是使用 .Net 4 编写的。

使用 PermissionSet 管理程序集安全性。

问题是创建的域无法访问该部分,导致 SecurityException“请求失败”。 要求的行动是:<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true"/>

我已经尝试了很多权限,但没有任何影响:

        permSet.AddPermission(new System.Security.Permissions.FileIOPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.ReflectionPermission(ReflectionPermissionFlag.MemberAccess));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.ControlEvidence));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.ControlPolicy));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(SecurityPermissionFlag.SerializationFormatter));
        System.Configuration.Configuration cnf = System.Configuration.ConfigurationManager.OpenMachineConfiguration();
        permSet.AddPermission(new System.Security.Permissions.FileIOPermission(FileIOPermissionAccess.Read, cnf.FilePath));
        permSet.AddPermission(new System.Security.Permissions.GacIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.EnvironmentPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.PublisherIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.RegistryPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.SecurityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.StrongNameIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.TypeDescriptorPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.UrlIdentityPermission(PermissionState.Unrestricted));
        permSet.AddPermission(new System.Security.Permissions.ZoneIdentityPermission(PermissionState.Unrestricted));

我尝试访问这样的部分:

(MySection)ConfigurationManager.GetSection("mySectionGroup/mySection")

像这样:

var configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var config = (DictionaryConfigurationSection)configuration.GetSection("agent/dictionaries");

该部分定义为将 requirePermission 设置为 false。

谢谢

【问题讨论】:

    标签: c# permissions appdomain code-access-security


    【解决方案1】:

    事实上,ConfigurationSection 是在完全信任程序集中定义的。因此,部分信任调用者无法读取配置部分,即使存在 require permission = false 也是如此。 我找到了一种解决方法,使用此属性标记包含配置节定义的程序集:AllowPartiallyTrustedCallers

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-18
      • 2010-10-28
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      相关资源
      最近更新 更多