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

如何在守护进程应用中用Azure应用配置绑定TokenAcquirerFactory

问题描述

我正在遵循一份基于CIAM租户创建守护进程应用(以自身身份调用自定义Web API)的教程,默认代码中TokenAcquirerFactory.GetDefaultInstance()会自动读取appsettings.json,但我希望完全改用Azure应用配置来加载配置。

目前已成功修改下游API的配置读取逻辑:
原代码:

tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
    tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));

修改后(已成功从Azure应用配置读取DownstreamApi节点):

tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
     config.GetSection("DownstreamApi"));  // config 是已初始化的静态 IConfigurationRoot 实例

但尝试以下三种方式绑定TokenAcquirerFactory的AzureAd配置均失败:

  1. TokenAcquirerFactory.GetDefaultInstance(config.GetSection("AzureAd"));
tokenAcquirerFactory.Services.Configure<MicrosoftIdentityApplicationOptions>(option =>
{
    config.GetSection("AzureAd").Bind(option);
});
tokenAcquirerFactory.Services.AddAuthentication(option =>
{
    config.GetSection("AzureAd").Bind(option);
});

请问如何覆盖默认行为,完全不使用appsettings.json?

解决方案

要完全绕过appsettings.json,需要手动构建TokenAcquirerFactory实例,而非依赖默认的GetDefaultInstance()方法,同时将你的Azure应用配置实例直接传入。具体步骤如下:

  1. 确保已正确初始化Azure应用配置的IConfigurationRoot:
var config = new ConfigurationBuilder()
    .AddAzureAppConfiguration(options =>
    {
        options.Connect("你的Azure应用配置连接字符串");
        // 可选:筛选加载指定配置节点,减少不必要的配置读取
        options.Select("AzureAd:*");
        options.Select("DownstreamApi:*");
    })
    .Build();
  1. 手动创建TokenAcquirerFactory并传入自定义配置:
// 不要使用GetDefaultInstance,直接用Create方法传入你的配置
var tokenAcquirerFactory = TokenAcquirerFactory.Create(config);
  1. 保持已实现的下游API配置逻辑:
const string ServiceName = "MyDownstreamApi";
tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
    config.GetSection("DownstreamApi"));
  1. (可选)若需额外调整认证选项,直接通过配置绑定:
tokenAcquirerFactory.Services.Configure<MicrosoftIdentityApplicationOptions>(
    config.GetSection("AzureAd"));
  1. 构建工厂并执行后续逻辑:
var app = tokenAcquirerFactory.Build();
// 获取令牌、调用API的原有逻辑保持不变
var tokenAcquirer = app.Services.GetRequiredService<ITokenAcquirer>();
var result = await tokenAcquirer.GetTokenForAppAsync(
    config["DownstreamApi:Scopes"]);

关键说明

  • TokenAcquirerFactory.Create(IConfiguration)方法允许直接传入自定义配置源,完全替代默认的appsettings.json加载流程。
  • 确保Azure应用配置中的AzureAd节点结构与原appsettings.json一致,包含ClientId、TenantId、ClientSecret等必要配置项。
  • 通过AddAzureAppConfiguration的Select方法筛选配置节点,可提升配置加载效率。

内容的提问来源于stack exchange,提问作者Vladimir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:45:28