You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# MSAL库能否基于Workload identity federation创建ConfidentialClient

C# MSAL 工作负载身份联合 ConfidentialClient 配置方案

核心结论

C# 版本的 MSAL 库(Microsoft.Identity.Client 包 4.44.0 及以上稳定版)完全支持通过工作负载身份联合创建 ConfidentialClient 应用,可完全替代密钥、证书验证方式,适配 GitHub Actions 无密钥运行集成测试的场景。
该能力没有单独命名为工作负载身份联合的专属配置项,而是封装在客户端断言配置逻辑中,所以容易被忽略。

实现步骤

1. 前置依赖

  • 提前在 Azure AD 应用注册中配置好对应 GitHub Actions 环境的联合身份凭据,完成信任关系配置
  • 安装符合版本要求的 MSAL NuGet 包:
Install-Package Microsoft.Identity.Client -Version 4.56.0

2. 代码实现

GitHub Actions 开启 OIDC 权限后,运行时会自动注入可用于身份联合的 OIDC 断言令牌,直接调用 MSAL 的 WithClientAssertion 方法传入该断言即可:

using Microsoft.Identity.Client;

// 从GitHub Actions运行时环境变量中获取OIDC断言令牌
string fedratedAssertion = Environment.GetEnvironmentVariable("<配置的断言环境变量名>");

// 构建无需密钥/证书的ConfidentialClient
var confidentialClient = ConfidentialClientApplicationBuilder
    .Create("<你的Azure AD应用客户端ID>")
    .WithTenantId("<你的Azure AD租户ID>")
    // 传入工作负载身份联合断言替代密钥/证书
    .WithClientAssertion(fedratedAssertion)
    .Build();

// 后续获取访问令牌的逻辑和原有密钥/证书模式完全一致
var tokenResult = await confidentialClient
    .AcquireTokenForClient(new[] { "<你要访问的API的作用域>" })
    .ExecuteAsync();

3. GitHub Actions 配置调整

需要在 workflow 文件中开启 ID 令牌读写权限,才能在运行时获取到联合身份需要的断言:

jobs:
  integration-test:
    runs-on: ubuntu-latest
    permissions:
      id-token: write # 必须开启,用于生成OIDC身份断言
      contents: read
    steps:
      # 你的其他步骤,比如签出代码、构建、运行测试等

补充说明

如果你同时使用 Azure 相关资源的 SDK,也可以直接使用 Azure.Identity 库的 DefaultAzureCredential,它会自动读取 GitHub Actions 的 OIDC 断言完成身份验证,无需手动配置 MSAL 客户端。

内容的提问来源于stack exchange,提问作者Tom De Vree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:15:00