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

Posted

技术标签:

【中文标题】将 Azure 网站连接到 Xero 合作伙伴应用程序【英文标题】:Connect Azure Website to Xero Partner Application 【发布时间】:2016-04-03 19:27:35 【问题描述】:

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

我上传了两个 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(使用的是云服务而不是网络应用,所以我无法按照最后的步骤进行操作) 403 Forbidden when loading X509Certificate2 from a file(同一个问题在Xero论坛上发帖,发现只能再次解决;云服务) Xero partner connections and Azure Websites(发布的解决方案建议使用虚拟机)

我还没有尝试过的:

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

错误截图:

【问题讨论】:

仅供参考,我们遇到了同样的问题,并且曾经在这里与 Microsoft 有过一个案例 - social.msdn.microsoft.com/Forums/azure/en-US/…。 【参考方案1】:

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

希望它能解决你的问题。

【讨论】:

为了记录,我已经完成了所有这些步骤并获得了相同的结果。 这可能对你有帮助 - developer.xero.com/documentation/advanced-docs/…,如果有帮助,请告诉我,我会更新我的答案以包含信息 这些步骤是让它在本地运行,我无权访问应用程序池或 Azure 上的任何 IIS 设置。 只是为了获取更多详细信息 - 您是否尝试过以下配置之一:azure.microsoft.com/en-us/blog/…azure.microsoft.com/en-us/documentation/articles/… 是的,如上所述,我已使用第一个链接上传我的证书。我在 Azure 上知道那里,因为我没有收到异常“找不到 Xero SSL 证书”(请参阅​​代码)。我的网站也有一个 SSL 证书,我已经完成了第二个链接中的步骤来配置它。【参考方案2】:

终于完成了这项工作,我将发布我的解决方案,希望在连接 Xero 时为开发人员节省大量时间和挫败感。

Xero 合作伙伴应用程序不适用于 Azure 应用服务(网站)。您必须上传两个额外的证书以及您的自签名证书和 Xero 合作伙伴证书。这些可以在您的本地计算机上找到,并且可以以 cer 格式导出(这些证书的详细信息如下)。无法为 Azure 应用服务上传这些证书确实是关键。它们还必须上传到特定的商店(根/CA),这是您无法通过应用服务完成的。这些是我与 Xero 建立联系所采取的步骤。

    将我的网站转换为 Azure 云服务:我已经厌倦了改变我们的环境,因为我们已经有了一个实时网站。事实证明,云服务与应用服务本质上是一样的;您仍在某处部署到虚拟机。但是,您可以更好地控制后端,并且可以远程桌面进入。阅读更多 here。使用以下链接创建我的网站并将其转换为云服务:

    Create a new cloud service project Convert existing web site to cloud service

    使用 azure 门户将 4 个证书上传到我的云项目。您需要上传以下内容:

    您的自签名证书(您创建的here) Xero 颁发的合作伙伴证书(你可能已经拿到了here) 中间委托证书(该证书应包含在您在上面下载的 .p12 文件中) Entrust 根证书(这应该在您的受信任的根存储中**)

    将证书添加到我在云项目中的 Web 角色。您必须右键单击 Web 角色的属性并转到证书选项卡。使用上传后在门户中可见的指纹将所有 4 个证书添加到您的 Web 角色。 记下两个委托证书的商店名称

您可能需要耐心等待,因为我必须完成第一步。你必须弄清楚新的部署过程,如何在本地调试你的项目,可能还有很多其他令人沮丧的花絮!

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

【讨论】:

【参考方案3】:

确保您在referenced article 的第 2 步中添加了应用程序设置。

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

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

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

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

【讨论】:

以上是关于将 Azure 网站连接到 Xero 合作伙伴应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Azure Httptrigger 连接到网站?

使用 Azure 登录凭据通过 FTP 连接到 Azure 网站

如何远程连接到 Azure 网站中的 ClearDB?

将 Xamarin 应用注册页面连接到 MySQL 的 Azure 数据库

用于连接到虚拟机并运行 azcopy 的 Azure 逻辑应用

为啥我的 Azure 应用服务无法使用托管标识连接到 Azure 存储帐户?