Виклики 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) зберігає побудову HTTP-middleware Graph SDK, налаштовуючи його маршрут API.

Якщо посередник вимагає автентифікації, призначте потрібний обліковий запис властивості Credentials об'єкта проксі. Утримуйте власні транспорти протягом усього життя компонента й звільняйте їх під час завершення.

Використовуйте цей шаблон із зазначеним поколінням SDK. Приклади HttpProvider і DelegateAuthenticationProvider належать до попереднього покоління і не можуть бути змішані в цьому ланцюжку конструкторів.

Схожі статті