将Azure网站连接到Xero合作伙伴应用程序

我正在将我的应用程序与需要两个证书的Xero集成。 在本文的帮助下,我将它们上传到了Azure,但我仍无法连接到Xero API。 我希望有人将Xero合作伙伴应用程序与Azure Web App集成在一起。

我已经上传了两个pfx文件; 一个是自签名证书,另一个是Xero颁发的合作伙伴证书。 后者的pfx文件包含两个证书; 一个Entrust商业私人小组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();
        }
    }

这适用于本地,但在我的天蓝色网站上,我得到了一个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.

我也看过以下参考资料来尝试解决问题:

  • Azure中的Xero Partner SSL配置(使用云服务而不是Web应用程序,因此我无法按照最后的步骤进行操作)
  • 403从文件加载X509Certificate2时出现Forbidden(在Xero论坛上发布的关于同一问题的线索,发现该解决方案仅适用于一次;云服务)
  • Xero合作伙伴连接和Azure网站(发布解决方案建议使用VM)
  • 我还没有尝试过的东西:

  • 将我的网络应用程序转换为云服务; 试图避免这样做,但我不确定涉及哪些步骤。
  • 使用VM; 我还没有找到如何做到这一点的详细步骤,但似乎是比上述更好的选择。
  • 错误的屏幕截图: 错误


    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

    我希望它解决了你的问题。


    最后得到了这个工作,我将发布我的解决方案,希望在与Xero连接时,可以为开发人员节省大量时间和挫败感。

    Xero合作伙伴应用程序不适用于Azure应用程序服务 (网站)。 您必须上传两个附加证书以及您的自签名和Xero合作伙伴证书。 这些可以在本地计算机上找到,并可以以cer格式导出(下面的这些证书的详细信息)。 无法将这些证书上传到Azure应用服务确实是一个拐杖。 他们还必须上传到特定的商店(Root / CA),这是您无法通过应用服务完成的。 这些是我用来连接Xero的步骤。

  • 将我的网站转换为Azure云服务:由于我们已经有一个在线站点,因此我对改变环境感到厌倦。 事实证明,云服务与应用服务基本相同; 你仍然在某个地方部署到虚拟机。 但是,您可以对后端进行更多控制,并且可以使用远程桌面。请阅读此处。 以下链接用于创建我的网站并将其转换为云服务:

  • 创建一个新的云服务项目
  • 将现有网站转换为云服务
  • 使用Azure门户将4个证书上载到我的云计划。 您需要上传以下内容:

  • 您的自签名证书(您在此创建的证书)
  • 由Xero颁发的合作伙伴证书(您可能在此获得)
  • 中级委托证书(这个应该包含在你上面下载的.p12文件中)
  • Entrust Root证书(这应该在您的受信任的根存储**中)
  • 将这些证书添加到云项目中的Web角色。 您必须右键单击Web角色的属性,然后转到证书选项卡。 使用缩略图将所有4个证书添加到您的Web角色中,然后您将它们上传到门户中。 记下两个委托证书的商店名称

  • 在这里输入图像描述

    你必须采取很多的耐心,因为我必须通过第一步。 你必须弄清楚新的部署过程,如何在本地调试你的项目,以及可能还有很多其他令人沮丧的小技巧!

    **这是使用certmgr.msc可以获得的正确的Entrust Root证书:

    在这里输入图像描述


    确保你添加了引用文章的第2步中的应用程序设置。

    添加一个名为WEBSITE_LOAD_CERTIFICATES的应用程序设置,将其值设置为证书的指纹将使您的Web应用程序可访问该设置。 您可以有多个以逗号分隔的指纹值,或者可以将此值设置为“*”(不含引号),在这种情况下,所有证书都将加载到您的Web应用程序个人证书存储区。

    我也会更具体地指定证书存储区,即使用:

    var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

    这就是我们如何在所有Azure Web应用程序中加载证书的方式。

    链接地址: http://www.djcxy.com/p/89535.html

    上一篇: Connect Azure Website to Xero Partner Application

    下一篇: How to mock MotionEvent and SensorEvent for Unit Testing in android?