【问题标题】:how to read certificate if web app is hosted over azure app service如果 Web 应用程序托管在 azure 应用程序服务上,如何读取证书
【发布时间】:2020-10-18 10:11:42
【问题描述】:

我有一个 asp.net 核心 web api (app1) 应用程序正在调用另一个 asp.net 核心 web api (app2),我正在考虑将 app1 作为守护程序应用程序,我想使用证书而不是应用程序来跟踪客户端凭据秘密。

https://github.com/Azure-Samples/active-directory-dotnetcore-daemon-v2/tree/master/2-Call-OwnApi#variation-daemon-application-using-client-credentials-with-certificates

一切正常,直到我的 app1app2 在本地机器上运行,我正在读取如下证书,

private static X509Certificate2 ReadCertificate(string certificateName)
    {
        if (string.IsNullOrWhiteSpace(certificateName))
        {
            throw new ArgumentException("certificateName should not be empty. Please set the CertificateName setting in the appsettings.json", "certificateName");
        }
        X509Certificate2 cert = null;

        using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection certCollection = store.Certificates;

            // Find unexpired certificates.
            X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);

            // From the collection of unexpired certificates, find the ones with the correct name.
            X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindBySubjectDistinguishedName, certificateName, false);

            // Return the first certificate in the collection, has the right name and is current.
            cert = signingCert.OfType<X509Certificate2>().OrderByDescending(c => c.NotBefore).FirstOrDefault();
        }
        return cert;
    }

证书在本地机器中,我正在从这里读取它,

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

现在我想用 azure app 服务同时托管 app1 和 2,现在的问题是如何读取证书?

谢谢!

【问题讨论】:

标签: c# azure-active-directory certificate asp.net-core-3.1


【解决方案1】:

在 Azure 计算(例如应用服务)上部署时,没有可用的 local 磁盘或证书存储之类的东西。

因此,除了the suggested changes 到您的应用程序配置之外,您还需要执行以下操作

  1. 将您的证书存储在 KeyVault(或等效项)中并从您的代码中获取它
  2. 更好,考虑使用Managed Identities

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多