Proxy für Microsoft Graph SDK v5 und Azure Identity konfigurieren
Konfigurieren Sie den Graph-API-Transport und den ClientSecretCredential-Transport während der Initialisierung, damit sowohl API- als auch Tokenanfragen eine Route haben.
Graph-API-Aufrufe und Tokenanfragen von ClientSecretCredential haben getrennte Einstiegspunkte für den Transport. Mit Microsoft.Graph 5 und Azure.Identity konfigurieren Sie beide, bevor der Client erstellt wird:
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);Für eine nicht authentifizierte öffentliche HTTP-Route stellt die HTTP-Proxy-Liste Kandidatenadressen für den gemeinsamen WebProxy bereit. Die Anwendung liefert tenantId, clientId und clientSecret über ihre bestehende Verwaltung der Anmeldeinformationen. Der Bereich .default verwendet die für diese Registrierung konfigurierten Anwendungsberechtigungen; eine Route kann keine Berechtigungen erteilen.
Lesen Sie die beiden Transportzeilen als das entscheidende Paar. HttpClientTransport(tokenHandler) überträgt die Tokenanfrage der Anmeldeinformationen. GraphClientFactory.Create(proxy: proxy) behält den Aufbau der HTTP-Middleware des Graph SDK bei und konfiguriert gleichzeitig dessen API-Route.
Wenn der Vermittler eine Authentifizierung verlangt, weisen Sie das erforderliche Konto der Eigenschaft Credentials des Proxy-Objekts zu. Behalten Sie eigene Transporte für die Lebensdauer der Komponente und geben Sie sie beim Herunterfahren frei.
Verwenden Sie dieses Muster mit der genannten SDK-Generation. Beispiele mit HttpProvider und DelegateAuthenticationProvider gehören zu einer früheren Generation und können nicht in diese Konstruktorkette eingemischt werden.