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

Azure Identity最佳实践:.NET Web应用多资源授权的Credential实例选择

关于共用或单独创建DefaultAzureCredential实例的最佳实践

最佳实践是共用同一个DefaultAzureCredential实例,原因如下:

  • 性能更优:DefaultAzureCredential内部会缓存已获取的令牌,共用实例能避免重复执行身份验证流程(比如多次尝试不同验证方式、重复请求令牌),减少不必要的网络开销和延迟。
  • 资源利用率更高:每个实例都会维护自己的缓存和状态,多实例会占用更多内存资源,单实例能降低资源消耗。
  • 行为更一致:共用实例能确保所有服务使用相同的身份验证策略(比如验证方法优先级、缓存规则),避免因实例配置差异导致的身份验证行为不一致。

推荐代码示例

// 所有服务共用单个AzureCredentials实例
var credentials = new DefaultAzureCredential();
var blobs = new BlobServiceClient(new Uri("mycontainer.url..."), credentials);
var eventHubClient = new EventHubProducerClient("eventhub.servicebus.windows.net", credentials);

var postgresScope = new TokenRequestContext(scopes: new string[] { "https://ossrdbms-aad.database.windows.net/.default" });
var postgresToken = await credentials.GetTokenAsync(postgresScope, cancellationToken);

不推荐的写法(原因:重复创建实例会导致缓存失效、额外的身份验证开销)

// 每个服务拥有独立的AzureCredentials实例(不推荐)
var blobs = new BlobServiceClient(new Uri("mycontainer.url..."), new DefaultAzureCredential());
var eventHubClient = new EventHubProducerClient("eventhub.servicebus.windows.net", new DefaultAzureCredential());

var postgresScope = new TokenRequestContext(scopes: new string[] { "https://ossrdbms-aad.database.windows.net/.default" });
var postgresToken = await new DefaultAzureCredential().GetTokenAsync(postgresScope, cancellationToken);

如果有特殊需求(比如不同服务需要不同的身份验证配置,比如指定不同租户ID、排除某些验证方法),可以单独创建配置不同的DefaultAzureCredential实例,但这种场景很少见,大部分情况下共用单实例是最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:57:30