如何在守护进程应用中用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配置均失败:
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应用配置实例直接传入。具体步骤如下:
- 确保已正确初始化Azure应用配置的
IConfigurationRoot:
var config = new ConfigurationBuilder() .AddAzureAppConfiguration(options => { options.Connect("你的Azure应用配置连接字符串"); // 可选:筛选加载指定配置节点,减少不必要的配置读取 options.Select("AzureAd:*"); options.Select("DownstreamApi:*"); }) .Build();
- 手动创建
TokenAcquirerFactory并传入自定义配置:
// 不要使用GetDefaultInstance,直接用Create方法传入你的配置 var tokenAcquirerFactory = TokenAcquirerFactory.Create(config);
- 保持已实现的下游API配置逻辑:
const string ServiceName = "MyDownstreamApi"; tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName, config.GetSection("DownstreamApi"));
- (可选)若需额外调整认证选项,直接通过配置绑定:
tokenAcquirerFactory.Services.Configure<MicrosoftIdentityApplicationOptions>( config.GetSection("AzureAd"));
- 构建工厂并执行后续逻辑:
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
相关产品推荐
相关产品推荐

