【问题标题】:PayPal - ASP.NET Medium TrustPayPal - ASP.NET 中等信任度
【发布时间】:2010-11-22 20:43:53
【问题描述】:

最近,我们的 Web 托管服务提供商将所有共享 ASP.NET 站点托管的信任级别提升到了中等信任级别。因此,我们在通过 PayPal 的 SOAP API 完成交易时遇到了一些问题。具体来说,使用以下堆栈跟踪引发了 SecurityException 异常:

[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() +30
   com.paypal.sdk.core.soap.SOAPAPICaller..ctor() +14
   com.paypal.sdk.services.CallerServices..ctor() +23
...

我在 PayPal SOAP SDK 中找到了违规方法的来源。

/// <summary>
/// To Accept all un-trusted certificate
/// </summary>
private void SetTrustManager()
{
    //This code is added to accept all un-trusted certificate i.e self-signed certificate
    if (Config.Instance.TrustAll)
    {
       //ServicePointManager.CertificatePolicy = TrustAllCertificatePolicy.Instance;
       ServicePointManager.CertificatePolicy = new MyPolicy();              
    }
} // SetTrustManager

是否有人知道需要进行哪些更改才能使 SDK 在中等信任环境中运行?是否有必要接受所有不受信任的证书?

谢谢。

【问题讨论】:

    标签: asp.net security


    【解决方案1】:

    您可以要求您的 ISP 对 PayPal 程序集进行 GAC - 这样它们在完全信任的情况下运行(假设它们在程序集上设置了允许部分信任的调用者属性)。

    Medium Trust 的另一个问题是它不允许传出网络连接,包括 SOAP 调用。

    【讨论】:

      【解决方案2】:

      我的问题是读取配置文件

      替换

      public static Dictionary<string, string> GetConfig()
      {  
          return PayPal.Api.ConfigManager.Instance.GetProperties();
      }
      

      作者

      public static Dictionary<string, string> GetConfig()
      {  
          var dict = new Dictionary<string, string>();
          dict["mode"] = "sandbox";
          dict["connectionTimeout"] = "360000";
          dict["requestRetries"] = "1";
          dict["clientId"] = "AXRCZ.....-NJ1asp";
          dict["clientSecret"] = "EFQC....x5tqD14-tf";
          return dict;
      }
      

      托马斯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-13
        • 1970-01-01
        • 2010-09-13
        • 2011-04-06
        • 2011-02-01
        • 1970-01-01
        • 2010-12-22
        • 2011-02-06
        相关资源
        最近更新 更多