gpt4 book ai didi

c# - Azure:通过证书从云工作人员连接到 key 保管库

转载 作者:行者123 更新时间:2023-12-02 00:36:03 25 4
gpt4 key购买 nike

我有一个工作进程作为 Azure 中的经典云服务运行。此过程需要从 Azure key 保管库检索值,并且我需要将保管库身份验证保密在源树之外。

托管身份似乎不适用于经典云工作人员,因此我正在查看证书。我已通过证书进行身份验证,以便在本地工作,方法是创建证书,然后上传到 Azure Active Directory 中以进行应用程序注册:

证书创建:

New-SelfSignedCertificate -Subject "CN=MyFineCertificate" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature

使用它连接到 key 保管库的代码(在本地工作):

private static KeyVaultClient GetClient()
{
var certificate = GetCertificate();
var assertion = new ClientAssertionCertificate(clientId, certificate);
var client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback((a, r, s) => GetAccessTokenUsingCert(a, r, s, assertion)));
return client;
}

private static X509Certificate2 GetCertificate()
{
var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certStore.Open(OpenFlags.ReadOnly);
var results = certStore.Certificates.Find(/* criteria */);
return results[0];
}

private static async Task<string> GetAccessToken(string authority, string resource, string scope, ClientAssertionCertificate cert)
{
var authContext = new AuthenticationContext(authority, TokenCache.DefaultShared);
var result = await authContext.AcquireTokenAsync(resource, cert);
return result.AccessToken;
}

到目前为止一切顺利。但是,我希望我的 Azure 云工作人员能够执行此操作,因此我需要在那里提供我的证书。我天真的假设是,我可以从门户中云工作人员的“证书”面板上传证书 (pfx)。

不幸的是,我的云工作人员无法找到它。如果我在 Azure 上运行此程序,上传我的证书后,它不会显示:

foreach (StoreName name in Enum.GetValues(typeof(StoreName)))
{
foreach (StoreLocation location in Enum.GetValues(typeof(StoreLocation)))
{
var certStore = new X509Store(name, location);
certStore.Open(OpenFlags.ReadOnly);
foreach (var res in certStore.Certificates)
{
/* log certificate */
}
}
}

为什么不显示?我是否走在正确的轨道上,或者我完全误解了它是如何工作的?

最佳答案

您的问题分为两部分:

  1. 方法 - 由于云服务无法使用托管服务身份,如何使用 Azure Key Vault 进行工作/身份验证?

    您走在正确的道路上。我在这篇 SO 帖子中描述了使用 Key Vault 解决类似问题的方法 - Securing sensitive information in Azure Cloud Service Configuration

  2. 实现 - 具体来说如何从云服务角色实例访问自签名证书。

    我认为您可能缺少指定证书及其在云服务定义和配置文件中的位置。你应该尝试添加这样的东西 -

    CSCFG

     <Certificates>
    <Certificate name="MyFineCertificate" thumbprint="<my_thumbprint>" thumbprintAlgorithm="<my_thumbprint_algo e.g. sha1>" />
    </Certificates>

    CSDEF

     <Certificates>
    <Certificate name="MyFineCertificate" storeLocation="LocalMachine" storeName="My" />
    </Certificates>

    请注意,我已将商店位置提到为 LocalMachine。现在,您应该能够通过指定正确的位置从代码访问证书。

    var certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);

关于c# - Azure:通过证书从云工作人员连接到 key 保管库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54106197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com