通过基于证书的身份验证,可以使用客户端证书通过 Microsoft Entra ID 进行身份验证。 客户端证书可以位于 Windows、Android 或 iOS 设备上,也可以将客户端证书保存在 Azure Key Vault 中。
使用这种身份验证方法,可以通过证书颁发机构(CA)从中央位置管理证书的轮换和吊销。
可以在 “客户端凭据流 ”页中了解有关Microsoft Entra ID 中的证书的详细信息。
方法
步骤 1 - 将内容嵌入服务主体
若要使用服务主体嵌入内容,请按照 服务主体和应用程序机密嵌入 Power BI 内容中的说明进行操作。
注释
如果已有使用服务主体嵌入的内容,请跳过此步骤并转到 步骤 2。
步骤 2 - 创建证书
可以从受信任的 证书颁发机构购买证书,也可以自行生成证书。
本部分介绍如何使用 Azure Key Vault 创建证书,并下载包含公钥 的 .cer 文件。
登录到 Azure。
搜索并选择 密钥保管库 链接。
选择要向其添加证书的密钥保管库。
选择证书。
选择生成/导入。
按如下所示配置 “创建证书 ”字段:
证书创建方法 - 常规
证书名称 - 输入证书的名称
证书颁发机构类型 (CA) - 自签名证书
主题 - X.500 可分辨名称
DNS 名称 - 0 个 DNS 名称
有效期(以月为单位) - 输入证书的有效期
内容类型 - PKCS #12
生命周期动作类型 - 在给定百分比的生命周期内自动续订
生存期百分比 - 80
高级策略配置 - 未配置
选择 创建。 默认情况下,新创建的证书处于禁用状态。 最多可能需要五分钟才能启用。
选择创建的证书。
选择 下载 CER 格式。 下载的文件包含公钥。
步骤 3 - 设置证书身份验证
在 Microsoft Entra 应用程序中,选择“ 证书和机密 ”选项卡。
选择“上传证书”并上传在本教程的步骤 2 中创建和下载的.cer文件。 .cer文件包含公钥。
步骤 4 - 从 Azure Key Vault 获取证书
使用托管服务标识(MSI)从 Azure Key Vault 获取证书。 此过程涉及获取包含公钥和私钥的 .pfx 证书。
请参阅代码示例,了解如何从 Azure Key Vault 读取证书。 若要使用 Visual Studio,请参阅 配置 Visual Studio 以使用 MSI。
private X509Certificate2 ReadCertificateFromVault(string certName)
{
var serviceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(serviceTokenProvider.KeyVaultTokenCallback));
CertificateBundle certificate = null;
SecretBundle secret = null;
certificate = keyVaultClient.GetCertificateAsync($"https://{KeyVaultName}.vault.azure.cn/", certName).Result;
secret = keyVaultClient.GetSecretAsync(certificate.SecretIdentifier.Identifier).Result;
return new X509Certificate2(Convert.FromBase64String(secret.Value));
}
步骤 5 - 使用服务主体和证书进行身份验证
可以通过连接到 Azure Key Vault 对使用服务主体和存储在 Azure Key Vault 中的证书的应用进行身份验证。
若要从 Azure Key Vault 连接和读取证书,请参阅以下代码示例。
注释
如果组织已创建证书,请将 .pfx 文件上传到 Azure Key Vault。
// Preparing needed variables
var Scope = "https://analysis.chinacloudapi.cn/powerbi/api/.default"
var ApplicationId = "{YourApplicationId}"
var tenantSpecificURL = "https://login.partner.microsoftonline.cn/{YourTenantId}/"
X509Certificate2 certificate = ReadCertificateFromVault(CertificateName);
// Authenticating with a SP and a certificate
public async Task<AuthenticationResult> DoAuthentication(){
IConfidentialClientApplication clientApp = null;
clientApp = ConfidentialClientApplicationBuilder.Create(ApplicationId)
.WithCertificate(certificate)
.WithAuthority(tenantSpecificURL)
.Build();
return await clientApp.AcquireTokenForClient(Scope).ExecuteAsync();
}
将 Visual Studio 配置为使用 MSI
创建嵌入式解决方案时,将 Visual Studio 配置为使用托管服务标识(MSI)可能很有用。 MSI 是一项功能,可用于管理Microsoft Entra 标识。 配置后,它将允许 Visual Studio 针对 Azure Key Vault 进行身份验证。
注释
登录到 Visual Studio 的用户需要 Azure Key Vault 权限才能获取证书。
在 Visual Studio 中打开项目。
选择“工具”“选项”。
搜索并选择 “帐户选择”。
添加有权访问 Azure Key Vault 的帐户。