通过服务主体和证书嵌入 Power BI 内容

通过基于证书的身份验证,可以使用客户端证书通过 Microsoft Entra ID 进行身份验证。 客户端证书可以位于 Windows、Android 或 iOS 设备上,也可以将客户端证书保存在 Azure Key Vault 中。

使用这种身份验证方法,可以通过证书颁发机构(CA)从中央位置管理证书的轮换和吊销。

可以在 “客户端凭据流 ”页中了解有关Microsoft Entra ID 中的证书的详细信息。

方法

  1. 使用服务主体嵌入内容

  2. 创建证书

  3. 设置证书身份验证

  4. 从 Azure Key Vault 获取证书

  5. 使用服务主体和证书进行身份验证

步骤 1 - 将内容嵌入服务主体

若要使用服务主体嵌入内容,请按照 服务主体和应用程序机密嵌入 Power BI 内容中的说明进行操作。

注释

如果已有使用服务主体嵌入的内容,请跳过此步骤并转到 步骤 2

步骤 2 - 创建证书

可以从受信任的 证书颁发机构购买证书,也可以自行生成证书。

本部分介绍如何使用 Azure Key Vault 创建证书,并下载包含公钥 的 .cer 文件。

  1. 登录到 Azure

  2. 搜索并选择 密钥保管库 链接。

    Azure 门户窗口的屏幕截图,其中显示了“服务”列表中的密钥保管库服务的链接。

  3. 选择要向其添加证书的密钥保管库。

    Azure 门户窗口的屏幕截图,其中显示了密钥保管库列表中已模糊的密钥保管库列表。

  4. 选择证书

    Azure 门户窗口的屏幕截图,其中显示了“密钥保管库”页,其中突出显示了“证书”项。

  5. 选择生成/导入

    Azure 门户窗口的屏幕截图,其中显示了“证书”窗格,其中突出显示了“生成/导入”项。

  6. 按如下所示配置 “创建证书 ”字段:

    • 证书创建方法 - 常规

    • 证书名称 - 输入证书的名称

    • 证书颁发机构类型 (CA) - 自签名证书

    • 主题 - X.500 可分辨名称

    • DNS 名称 - 0 个 DNS 名称

    • 有效期(以月为单位) - 输入证书的有效期

    • 内容类型 - PKCS #12

    • 生命周期动作类型 - 在给定百分比的生命周期内自动续订

    • 生存期百分比 - 80

    • 高级策略配置 - 未配置

  7. 选择 创建。 默认情况下,新创建的证书处于禁用状态。 最多可能需要五分钟才能启用。

  8. 选择创建的证书。

  9. 选择 下载 CER 格式。 下载的文件包含公钥。

    Azure 门户窗口的屏幕截图,其中显示了突出显示 “下载为 CER 格式”的按钮。

步骤 3 - 设置证书身份验证

  1. 在 Microsoft Entra 应用程序中,选择“ 证书和机密 ”选项卡。

    Azure 门户窗口的屏幕截图,其中显示了应用的证书和机密窗格。

  2. 选择“上传证书”并上传在本教程的步骤 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 权限才能获取证书。

  1. 在 Visual Studio 中打开项目。

  2. 选择“工具”“选项”。

    Visual Studio 窗口的屏幕截图,其中显示了“工具”菜单中突出显示的“选项”按钮。

  3. 搜索并选择 “帐户选择”。

    Visual Studio 选项窗口的屏幕截图,其中显示了搜索结果中突出显示的“帐户选择”选项。

  4. 添加有权访问 Azure Key Vault 的帐户。