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

如何基于已获取的OAuth令牌创建Credential以使用Azure Key Vault的SecretClient?

如何基于已获取的OAuth令牌创建Credential以使用Azure Key Vault的SecretClient?

嗨,看起来你已经在公共客户端认证的路上取得了不少进展,能拿到OAuth令牌并成功调用Key Vault REST API已经很棒了!我来帮你解决两个核心问题:一是怎么用手里的OAuth令牌直接创建SecretClient需要的Credential,二是让DefaultAzureCredential在域加入的测试PC上正常工作。


方案一:用已有的OAuth令牌创建Credential

如果你已经通过公共客户端认证拿到了有效的OAuth访问令牌,最直接的方式是用Azure.Identity库中的AccessTokenCredential类——它可以直接把你的令牌包装成SecretClient需要的TokenCredential类型。

代码示例

// 假设你已经通过公共客户端认证获取到了有效的OAuth访问令牌
string existingAccessToken = "your-valid-oauth-token";
string tenantId = "<my tenant>";

// 用令牌创建AccessTokenCredential
var tokenCredential = new AccessTokenCredential(existingAccessToken, tenantId);

// 初始化SecretClient
SecretClient client = new SecretClient(
    new Uri("https://mykeyvault.vault.azure.net/"), 
    tokenCredential
);

// 调用Key Vault接口获取密钥
var secret = client.GetSecret("mysecret");
MessageBox.Show(secret.Value.Value);

注意事项

  • 确保你的OAuth令牌受众(audience)是https://vault.azure.net,不然Key Vault会拒绝这个令牌。
  • 令牌需要包含Key Vault的相应权限(比如Secrets.Get),这点你之前用REST API成功过,应该已经配置好RBAC权限了,没问题。

方案二:让DefaultAzureCredential在测试PC上正常工作

你之前用DefaultAzureCredential时只在VS环境或环境变量下生效,是因为默认配置没有优先启用适合域账号的认证方式。我们可以调整DefaultAzureCredentialOptions,让它优先尝试用域账号的交互式认证或缓存的令牌。

修改后的代码示例

string tenantId = "<my tenant>";

DefaultAzureCredentialOptions options = new DefaultAzureCredentialOptions
{
    TenantId = tenantId,
    ExcludeEnvironmentCredential = true, // 排除环境变量方式,符合你的需求
    ExcludeVisualStudioCredential = true, // 排除VS凭证,避免测试PC依赖VS登录
    IncludeInteractiveCredentials = true, // 允许交互式认证(比如弹出系统认证窗口)
    ExcludeAzureCliCredential = true, // 如果不需要CLI凭证可以排除
    ExcludeAzurePowerShellCredential = true // 同理,不需要的话可以排除
};

DefaultAzureCredential credential = new DefaultAzureCredential(options);

SecretClient client = new SecretClient(
    new Uri("https://mykeyvault.vault.azure.net/"), 
    credential
);

string secretValue = client.GetSecret("mysecret").Value.Value;
MessageBox.Show(secretValue);

为什么这样配置?

在域加入的PC上,开启IncludeInteractiveCredentials后,DefaultAzureCredential会自动尝试用InteractiveBrowserCredential或者系统认证 broker(比如Windows Hello),这时候如果用户已经用Entra ID域账号登录了PC,通常可以自动完成认证,不需要手动输入密码——和你之前调用REST API的认证流程一致。


备注:内容来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:50:33