我正在将我的应用程序与需要两个证书的Xero集成在一起。我在this文章的帮助下将它们上传到Azure,但是仍然无法连接到Xero API。我希望有人有将Xero Partner Application与Azure Web App集成的经验。

我已经上传了两个pfx文件;一个是自签名证书,另一个是Xero颁发的合作伙伴证书。后一个pfx文件包含两个证书。一个Entrust Commercial Private Sub CA1(无论如何)和一个唯一的Entrust Id证书给我的应用程序。

我正在使用以下代码通过其唯一指纹加载证书:

    static X509Certificate2 GetCertificateFromStore(string thumbprint)
    {
        var store = new X509Store(StoreLocation.CurrentUser);

        try
        {
            thumbprint = Regex.Replace(thumbprint, @"[^\da-zA-z]", string.Empty).ToUpper();
            store.Open(OpenFlags.ReadOnly);

            var certCollection = store.Certificates;
            var currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
            var signingCert = currentCerts.Find(X509FindType.FindByThumbprint, thumbprint, false);

            if (signingCert.Count == 0)
            {
                throw new Exception($"Could not find Xero SSL certificate. cert_name={thumbprint}");
            }

            return signingCert[0];
        }
        finally
        {
            store.Close();
        }
    }

这在本地可以正常工作,但是在我的azure网站上,我收到403.7错误:
The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server recognizes.

我还查看了以下引用,以尝试解决该问题:
  • Xero Partner SSL configuration in Azure(使用云服务而不是Web应用程序,因此我无法按照最后的步骤进行操作)
  • 403 Forbidden when loading X509Certificate2 from a file(在Xero论坛上发布的有关同一问题的主题,指出该解决方案仅适用于云服务一次)
  • Xero partner connections and Azure Websites(发布的解决方案建议使用VM)

  • 我还没有尝试过:
  • 将我的Web应用程序转换为云服务;试图避免这样做,但是我不确定所涉及的步骤。
  • 使用虚拟机;我尚未找到有关执行此操作的任何详细步骤,但似乎是比上述更好的选择。

  • 错误的屏幕截图:
    c# - 将Azure网站连接到Xero合作伙伴应用程序-LMLPHP

    最佳答案

    403错误表示我们在连接中没有看到Xero Entrust证书。
    有关此的更多详细信息-http://blog.xero.com/developer/api-overview/http-response-codes/#403

    基本上,它在您的本地IIS实例上运行,因为它是一台“单租户”计算机,无需将您的应用程序与其他应用程序隔离。

    当您的应用程序被用于隔离网站的安全模型阻止时。

    总之,您必须执行以下操作才能使证书在Azure上运行:

    1)将证书,私钥和所有中间证书导出到PFX文件中。

    2)使用Azure门户将证书上传到您正在运行的云服务(证书应显示为多个条目)。

    3)通过机器存储区中的代码访问证书。

    基于以下数据:
    https://community.xero.com/developer/discussion/626401

    https://social.msdn.microsoft.com/Forums/azure/en-US/29b30f25-eea9-4e8e-8292-5ac8085fd42e/access-to-certificates-in-azure-web-sites

    希望它能解决您的问题。

    关于c# - 将Azure网站连接到Xero合作伙伴应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34519068/

    10-10 03:07