使用服务主体和证书嵌入 Power BI 内容

基于证书的身份验证让你可以使用客户端证书通过 Microsoft Entra ID 进行身份验证。 客户端证书可以保存在 Windows、Android 或 iOS 设备上,也可以保存在 Azure 密钥保管库中。

借助这种身份验证方法,可使用证书颁发机构 (CA) 从一个中心位置管理证书,以便进行轮换或吊销。

要详细了解 Microsoft Entra ID 中的证书,请参阅客户端凭据流 GitHub 页面。

方法

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

  2. 创建证书

  3. 设置证书身份验证

  4. 从 Azure Key Vault 获取证书

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

第 1 步 - 使用服务主体嵌入内容

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

注意

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

第 2 步 - 创建证书

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

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

  1. 登录 Microsoft 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 密钥保管库获取证书

使用托管服务标识 (MSI) 从 Azure 密钥保管库获取证书。 此过程涉及获取同时包含公钥和私钥的 .pfx 证书。

请参阅从 Azure 密钥保管库读取证书的代码示例。 如果要使用 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.net/", certName).Result;
    secret = keyVaultClient.GetSecretAsync(certificate.SecretIdentifier.Identifier).Result;
    
    return new X509Certificate2(Convert.FromBase64String(secret.Value));
}

第 5 步 - 使用服务主体和证书进行身份验证

通过连接到 Azure 密钥保管库,可以使用服务主体和 Azure 密钥保管库中存储的证书对应用进行身份验证。

要连接并从 Azure 密钥保管库读取证书,请参阅下面的代码示例。

注意

如果你已有组织创建的证书,请将 .pfx 文件上传到 Azure 密钥保管库。

// Preparing needed variables
var Scope = "https://analysis.windows.net/powerbi/api/.default"
var ApplicationId = "{YourApplicationId}"
var tenantSpecificURL = "https://login.microsoftonline.com/{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 密钥保管库进行身份验证。

注意

登录 Visual Studio 的用户需要拥有 Azure 密钥保管库权限才能获取证书。

  1. 在 Visual Studio 中打开项目。

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

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

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

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

  4. 添加有权访问你 Azure 密钥保管库的帐户。