如何配置Azure证书以迭代证书存储?

时间:2020-11-10 16:38:43

标签: access-token x509certificate azure-logic-apps azure-appservice

我有一个以前无法正常运行的Azure逻辑应用程序。我已经在Azure中继承了.NET核心MVC应用程序和逻辑应用程序。尚未开发出完整的解决方案(逻辑应用程序,API,DB SP等),我在跟踪所有运动部件并解决问题时遇到了一些困难。

据我所知,它应该像这样工作:

  • Logic App发布到报告URL(匿名)
  • C#代码表明,如果您未使用访问令牌作为用户登录,请使用配置文件(appsettings.json)中的指纹来查找适当的证书以获得SQL访问权限
  • 使用令牌运行“ SQL存储过程”以填充报告,并将其制成.PDF以将电子邮件附件发送到Azure存储,另一个逻辑应用程序将检查队列以将.PDF以电子邮件发送附件。
  • 由于第一个逻辑应用程序失败,因此第二个逻辑应用程序在队列中再也没有东西要处理

在此过程中,应用程序迭代所有可用证书并找到具有匹配指纹的证书的功能被破坏了。

在下面的代码中,它在“ var signingCert = store.Certificates ....”行上中断

private async Task<string> GetDatabaseTokenFromCert()
    {
        X509Certificate2 cert;
        var store = new X509Store(StoreLocation.CurrentUser);
        var authContext = new AuthenticationContext(_appSettings.AzureAD.AADInstance + _appSettings.AzureAD.TenantId);

        try
        {
            store.Open(OpenFlags.ReadOnly);
            var signingCert = store.Certificates.OfType<X509Certificate2>().FirstOrDefault(x => x.Thumbprint == _appSettings.AzureAD.CertificateThumbprint);

            if (signingCert == null)
            {
                throw new FileNotFoundException("Cannot locate certificate for DB access!", _appSettings.AzureAD.CertificateThumbprint);
            }

            cert = signingCert;
        }
        finally
        {
            store.Close();
        }
        var certCred = new ClientAssertionCertificate(_appSettings.AzureAD.ClientId, cert);
        var result = await Retry(() => authContext.AcquireTokenAsync(_appSettings.SqlConfig.ResourceId, certCred));            
        return result?.AccessToken;
    }

重要的appsettings.json部分如下。此屏幕截图中的所有内容均为“ _appSettings.AzureAD.SOMETHING”:注意指纹的最后数字为黄色

enter image description here

以下是Azure应用服务上有问题的证书(我认为)的屏幕截图:请注意与上面的指纹相同的数字

enter image description here

逻辑应用发布到的C#中的方法调用:

[AllowAnonymous][HttpPost("caseDiaryEmailReport")]
    public async Task<IActionResult> CaseDiaryEmailReport()

这是逻辑应用程序中发布到上述C#方法的行:

https://xxxxxRemovedxxx-reports.azurewebsites.net/api/activeReports/caseDiaryEmailReport

在我参与其中之前,我的理解是旧证书过期并且创建了新证书。如果我导出证书并将其安装在本地计算机上,并使用Fidler将其发布到报告API的URL,则该过程在本地运行良好,并填充了队列并发送了电子邮件。

Azure端需要什么配置,以便报表API可以像在开发计算机上运行时的本地证书存储区一样迭代Azure上的证书存储区?

为此困扰了好几天,谢谢!

0 个答案:

没有答案
相关问题