ASP.NET安全例外的原因

时间:2009-09-08 02:57:26

标签: asp.net security

我的应用程序正在抛出一个安全异常,其中包含以下详细信息:

描述:应用程序尝试执行安全策略

不允许的操作

异常详细信息:System.Security.SecurityException:请求类型为'System.Security.Permissions.SecurityPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'的权限失败。

[SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
   System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet) +0
   System.Security.CodeAccessPermission.Demand() +58
   System.Net.ServicePointManager.set_CertificatePolicy(ICertificatePolicy value) +54
   com.paypal.sdk.core.APICallerBase.SetTrustManager() +114

应用程序的信任级别设置为medium,我已将[assembly:AllowPartiallyTrustedCallers]属性添加到项目的程序集中。

我该怎么做才能解决这个问题? System.dll是否允许部分可信赖的呼叫者?

1 个答案:

答案 0 :(得分:1)

在挖掘中,paypal方法SetTrustManager()可能会尝试重新分配ServicePointManager的证书策略。这没关系,但它需要底层代码组的UnmanagedCode权限。

我建议您在.Net Framework配置控制台中提供此权限,看看是否有帮助。

或者,您可以将应用程序的配置“TrustAll”参数设置为False,以便SetTrustManager不会破坏证书策略(当然,假设所述证书策略可以随时用于您需要使用的任何证书,换句话说,此TrustAll事件可能会超出此权限错误,但如果证书,则会失败)

在类似情况下,我发现此MDSN page上的工具非常有用。

(在javacavaj中注释)允许调用某些程序集的非托管代码:

披露:我不是.NET安全模型的专家;以下内容应允许您更改授予某些程序集的权限,以便针对手头的问题进行诊断。出于生产目的,请由合格的管理员审核您的.NET配置,因为他/她可以确保配置是安全的,并建议某种方式来构建代码组,权限集和其他元素,以便于管理和部署。

您可以使用Mscorcfg.msc更改.NET安全策略,即.Net Framework配置控制台。详细信息可能因.NET版本和Windows主机而异,但一般情况下:

  • 启动mscorcfg(Ctrl面板|管理工具| Msft .Net Framework配置)
  • 运行时策略节点,然后是Manchine(或Enterprise,但更好的混乱,首先是本地cfg ...)
  • 权限集节点,单击右侧面板上的“创建新权限集”
  • 提供名称/说明,下一步
  • 安全|添加
  • 选择启用Assy执行,允许调用非托管程序集以及您可能需要的其他权限行
  • 选择代码组节点,然后向下导航到相关程序集可能属于的组(更容易,但为其创建一个组;通常,您可以通过查看“成员条件”选项卡来了解谁有资格获得给定组组属性。尽可能尝试使用强名称或GAC。
  • 在代码组属性中选择所需的权限集;使用“查看权限”按钮,可以通过“查看权限”按钮验证此集合是否符合给定权限。

Et瞧...

除了上述内容之外,我希望我知道一个可以[更好]描述此类程序的网站。也许这Overview of the .NET Security Model会有所帮助。谷歌搜索提供的几个关键字也可能产生相关的指针。