Möchten Sie Azure-Ressourcen wie z. B. einer VM oder Web-App Zugriff auf SharePoint Online ermöglichen ist das zwar technisch kein Problem – häufig gehören in einem solchem Szenario Azure-Ressourcen und M365-Daten zum gleichen Mandanten – Sie benötigen dazu aber eine sichere und präzise Zugriffssteuerung. Wollen Sie das manuelle Verarbeiten von Anmeldeinformationen vermeiden – stellen Sie sich vor, die VM hostet eine Unternehmensanwendung, die auf SharePoint-Daten angewiesen ist – sollten Sie hierzu eine verwaltete Identität verwenden. Mehr dazu erfahren Sie übrigens in meinen Kursen „Azure Cloud Architect“ oder „Bereitstellen von Web-Anwendungen„.
Die Managed Identity ist der von Microsoft empfohlene Ansatz für die sichere Authentifizierung bei Microsoft Graph und damit den Zugriff auf SharePoint-Ressourcen.
Ich habe hier habe hier schon häufiger über den prinzipiellen Zusammenhang von verwalteten Identitäten, Dienstprinzipalen, App-Registrierungen und Unternehmensanwendungen geschrieben. In diesem Beitrag möchte ich noch Mal anhand eines konkreten Beispiel zeigen, wie Sie Azure-Ressourcen (hier VMs oder Web-Apps) sicheren Zugriff auf M365-Daten über die Graph-API (hier am Beispiels SharePoint Online) gewähren können.
Virtuelle Maschine
Das klappt für eine virtuelle Maschine in Kürze wie folgt:
Schritt 1: Entra ID App-Registrierung
Um einer Web-Anwendung, die auf einer Azure-VM läuft, Zugriff auf SharePoint-Daten im gleichen Mandanten zu ermöglichen, müssen Sie zunächst eine App-Registrierung im EntraID erzeugen. Diese ermöglicht es Ihrer Web-Anwendung (egal, ob diese nun auf einer VM läuft oder als Azure Web-App bereitgestellt wird), sich bei Entra ID zu authentifizieren und Zugriffstoken zu erhalten. „Merken“ zur späteren Konfiguration müssen Sie die Anwendungs-ID (Client-ID) und ihre Verzeichnis-ID (Tenant-ID).
Schritt 2: API-Berechtigungen konfigurieren:
Nun fügen Sie in Ihrer App-Registrierung die erforderlichen API-Berechtigungen für SharePoint hinzu. Das machen Sie im Menü „API-Berechtigungen“ für die Microsoft Graph-API (App-Registrierungen unterstützten auch zahlreiche andere Microsoft-APIs) und gewähren dann explizit die Berechtigungen für „Sites.Read.All“ oder „Sites.ReadWrite.All“, je nach Bedarf.

Schritt 3: Client-Geheimnis erstellen:
Erstellen Sie dann „in“ Ihrer App-Registrierung ein Client-Geheimnis (Client Secret) für die App-Registrierung. Dies wird benötigt, um ein Zugriffstoken vom Entra ID abrufen zu können.
Schritt 4: Authentifizierung in der Web-Anwendung:
Implementieren Sie die Authentifizierung in Ihrer Web-Anwendung, um ein Zugriffstoken von Entra ID zu erhalten. Dies kann mit Bibliotheken wie MSAL (Microsoft Authentication Library) erfolgen. Verwenden Sie „in“ ihrem Programmcode Client-ID, die Tenant-ID und das Client-Geheimnis, um das Token zu erhalten. Ein Bespiel-Code-Fragment in C# sähe z. B. so aus:
var clientId = „Ihre-Client-ID“;
var tenantId = „Ihr-Tenant-ID“;
var clientSecret = „Ihr-Client-Geheimnis“;
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($“https://login.microsoftonline.com/{tenantId}“))
.Build();
var authResult = await confidentialClient.AcquireTokenForClient(new[] { „https://graph.microsoft.com/.default“ })
.ExecuteAsync();
var accessToken = authResult.AccessToken;
Schritt 5: Zugriff auf SharePoint-Daten:
Verwenden Sie das durch das oben angegebene Code-Fragment erhaltene Zugriffstoken, um in Ihrer Anwendung Anfragen an die SharePoint-API zu stellen. Sie können dazu die Microsoft Graph-API oder die SharePoint REST-API verwenden, um auf die Daten zuzugreifen.
Azure App Services
Selbstverständlich könnten Sie für das gleiche Beispiel auch eine Azure-Web-App, statt einer virtuellen Maschine mit DotNet-Stapel verwenden und die Anbindung an SharePoint konfigurieren.
Schritt 1: Entra ID App-Registrierung
Erstellen Sie für Ihre Web-App eine passende App-Registrierung.
Schritt 2: API-Berechtigungen konfigurieren
Konfigurieren Sie die gleichen Graph-API-Berechtigungen für den delegierten Zugriff auf SharePoint-Sites wie oben.
Schritt 3: Client-Geheimnis erstellen:
Erstellen Sie ein Client-Geheimnis für die App-Registrierung. Der „Wert“ des Client-Schlüssels wird als Identitätsausweis benötigt, wenn die App ein Token zur Authentifizierung abruft.

Schritt 4: Anwendungseinstellungen in der Azure-Web-App konfigurieren:
Bei einer Azure-Web-App bietet es sich förmlich an, Client-ID, Tenant-ID und Client-Secret direkt als so genannte App-Einstellungen (Application Settings) zu hinterlegen.

Schritt 5: Code in der Web-App verwenden:
Sie können nun diese Anwendungseinstellungen in Ihrem Code wie folgt abrufen:
var clientId = Environment.GetEnvironmentVariable(„ClientId“);
var tenantId = Environment.GetEnvironmentVariable(„TenantId“);
var clientSecret = Environment.GetEnvironmentVariable(„ClientSecret“);
var confidentialClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri($“https://login.microsoftonline.com/{tenantId}“))
.Build();
var authResult = await confidentialClient.AcquireTokenForClient(new[] { „https://graph.microsoft.com/.default“ })
.ExecuteAsync();
var accessToken = authResult.AccessToken;