为 Microsoft Graph SDK v5 与 Azure Identity 配置代理
在初始化时同时配置 Graph API 传输和 ClientSecretCredential 传输,让 API 请求与令牌请求都有可用的通路。
Graph API 调用与 ClientSecretCredential 令牌请求有各自独立的传输入口。使用 Microsoft.Graph 5 和 Azure.Identity 时,要在构造客户端之前把两者都配置好:
var proxy = new System.Net.WebProxy(
"http://proxy.example.net:8080");
var tokenHandler = new System.Net.Http.HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
var credentialOptions = new Azure.Identity.ClientSecretCredentialOptions
{
Transport = new Azure.Core.Pipeline.HttpClientTransport(tokenHandler)
};
var credential = new Azure.Identity.ClientSecretCredential(
tenantId, clientId, clientSecret, credentialOptions);
var authProvider =
new Microsoft.Kiota.Authentication.Azure.AzureIdentityAuthenticationProvider(
credential, scopes: new[] { "https://graph.microsoft.com/.default" });
var graphHttp = Microsoft.Graph.GraphClientFactory.Create(proxy: proxy);
var graphClient = new Microsoft.Graph.GraphServiceClient(
graphHttp, authProvider);对于无需身份验证的公共 HTTP 通路,HTTP 代理列表 可为共享的 WebProxy 提供候选地址。应用通过既有的凭据处理逻辑提供 tenantId、clientId 和 clientSecret。.default 作用域使用该注册所配置的应用权限;通路本身无法授予权限。
把这两行传输代码看作关键的一对。HttpClientTransport(tokenHandler) 负责承载凭据的令牌请求;GraphClientFactory.Create(proxy: proxy) 在保留 Graph SDK 的 HTTP 中间件构造的同时配置其 API 通路。
如果中间代理需要身份验证,请把所需账号赋给代理对象的 Credentials。在组件生命周期内保留自己创建的传输实例,并在关闭时释放它们。
请将此模式与所述 SDK 代次搭配使用。HttpProvider 与 DelegateAuthenticationProvider 的示例属于更早的代次,不能混入这条构造函数调用链。