C# 使用密钥库中的证书创建Azure web app SSL绑定

C# 使用密钥库中的证书创建Azure web app SSL绑定,c#,azure,azure-web-app-service,azure-keyvault,C#,Azure,Azure Web App Service,Azure Keyvault,我正在尝试使用从密钥库检索的证书将SSL添加到Azure web应用程序。我没有看到通过门户实现这一点的方法,所以我一直在尝试使用Azure API 我可以使用以下代码获取证书机密并将其转换为X509证书: AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider(); KeyVaultClient keyVaultClient = new KeyVaultClient(new Ke

我正在尝试使用从密钥库检索的证书将SSL添加到Azure web应用程序。我没有看到通过门户实现这一点的方法,所以我一直在尝试使用Azure API

我可以使用以下代码获取证书机密并将其转换为X509证书:

 AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
 KeyVaultClient keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

 SecretBundle secret2 = await keyVaultClient.GetSecretAsync(KEY_VAULT_IDENTIFIER);
 string pass = null;
 X509Certificate2 certificate = new X509Certificate2(Convert.FromBase64String(secret2.Value), pass, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

我真的不知道下一步该怎么办。我一直在查看Microsoft.Azure.Management.Fluent库,但没有找到任何工作

我的方向对吗?有什么例子可以帮助你吗?

对于C代码,你可以利用

您可以使用以下2个Nuget软件包:

  • Microsoft.Azure.Management.Fluent

  • Microsoft.Azure.Management.ResourceManager.Fluent

认证

你可以看报纸

第一步是为RBAC创建服务主体,授予其对相关资源组的权限,然后在代码中使用clientId、secret和租户信息

az ad sp create-for-rbac
代码

        string clientId = "xxxxx-xxx-xxxx";
        string clientSecret = "xxxxx-xxx-xxxx";
        string tenant = "xxxxx-xxx-xxxx";
        string subscriptionId = "xxxxx-xxx-xxxx";

        var creds = SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId, clientSecret, tenant, AzureEnvironment.AzureGlobalCloud);
        var azure = Azure.Authenticate(creds).WithSubscription(subscriptionId);

        var app1 = azure.WebApps.GetByResourceGroup("rgAppService", "MyAPIServiceName");

        app1.Update()
            .DefineSslBinding()
            .ForHostname("MyHostName")
            .WithExistingCertificate("<Thumbprint of the certificate>")
            .WithSniBasedSsl()  // could use different method .WithIpBasedSsl in case that is relevant
            .Attach()
            .Apply();
string clientId=“xxxxx-xxx-xxxx”;
字符串clientSecret=“xxxxx-xxx-xxxx”;
字符串tenant=“xxxxx-xxx-xxxx”;
字符串subscriptionId=“xxxxx-xxx-xxxx”;
var creds=SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId、clientSecret、租户、AzureEnvironment.AzureGlobalCloud);
var azure=azure.Authenticate(creds).WithSubscription(subscriptionId);
var app1=azure.WebApps.GetByResourceGroup(“rgAppService”、“MyAPIServiceName”);
app1.Update()
.DefineSslBinding()的定义
.ForHostname(“MyHostName”)
.现有证书(“”)
.WithNibaseDSSL()//可以使用不同的方法。如果相关,则使用IPBaseDSSL
附(
.Apply();
GitHub上的详细代码示例


此示例执行许多操作,如创建应用程序、域等,因此请选择适用于您的部分。

感谢您的回复。这非常接近,但当我使用“az ad sp create for rbac”创建服务提供商时,我得到一个错误,即我没有权限“执行操作”Microsoft.authorization/roleAssignments/write。当与我的IT人员合作获取访问权限时,他发出了一个危险信号,问我的应用程序为什么需要访问Active Directory?有没有一种方法可以在不去AD的情况下获得使用SDK的授权?或者以任何其他方式设置SSL绑定?