Fügt man einer Azure App Berechtigungen hinzu ist in den APIs von Microsoft Graph und SharePoint unter Application Permissions jeweils eine Berechtigungen Sites.Selected aufgeführt.
Nebenbei ist vermerkt eine betroffene Site benötigt zusätzliche Konfigurationen. Der Vermerk bedeutet der App muss mitgeteilt werden auf welche SharePoint Seite es Zugriff hat.
In meinem Beispiel möchte ich einer App nur den Zugriff auf die SharePoint Seite Finance Switzerland ermöglichen. In Summe sind es zwei Schritte + ein Test der Konfiguration.
- Erstellung einer neuen Azure AD App Registration mit der Berechtigung Sites.Selected. Bei Bedarf könnte die Berechtigung für eine bestehende App ergänzt werden. Übersichtshalber ist eine Trennung sinnvoller.
- Berechtigen der App auf ausgewählte SharePoint Site Collections.
- Zugriff über Code testen.
Schritt 1 ist schnell erledigt. Ich erstelle mir eine neue App Registration, füge der App ein Zertifikat für die Authentifizierung hinzu und vergebe die Berechtigung Application > Sites.Selected.
Zu beachten ist welche API gewählt wird, davon abhängig wie jemand später auf die SharePoint Seite zugreifen möchte:
- Für Zugriff über PnP.PowerShell ist die SharePoint API erforderlich.
- Für Zugriff über Graph ist die Microsoft Graph API erforderlich.
Für meine Simulation fügte ich beide Berechtigungen hinzu. Falls du Hilfe mit der App benötigst, eine Anleitung von mir bzw. eine Anleitung von Microsoft.
Ohne weiterer Konfiguration hat die App hat im Moment Zugriff auf nichts. Praktisch gesehen benötigt es die App in dem Zustand nicht. Der App fehlt eine weitere Berechtigung.
Schritt 2 sollte von einem Benutzerkonto mit der Rolle SharePoint Admin erfolgen, könnte aber auch ein Besitzer der betroffenen Site Collections sein. Für die Konfiguration ist PowerShell und das PnP.Powershell Modul in einer aktuellen Version erforderlich.
- Installiere oder aktualisiere das PnP.Powershell Modul.
- Verbinde dich mit einem aktuell berechtigten Konto (Besitzer oder SharePoint Admin) zu der SharePoint Seite.
Import-Module PnP.PowerShell
Connect-PnPOnline -Url <SharePointSiteURL> -Interactive
- Jetzt musst du die in Schritt 1 erstellte App über Grant-PnPAzureADAppSitePermission auf die SharePoint Seite berechtigen. Initial stehen die Berechtigungen Write und Read zur Verfügung.
Grant-PnPAzureADAppSitePermission -AppId <AzureAppID> -DisplayName <AzureAppName> -Site <SharePointSiteURL> -Permissions <Write|Read>
PowerShell bestätigt die Eingabe mit einer Berechtigungs-ID. Über die ID kann die Berechtigung später widerrufen werden.
- Optional: Mit Set-PnPAzureADAppSitePermission ist eine Erhöhung der Berechtigung auf Manage oder FullControl möglich.
Set-PnPAzureADAppSitePermission -PermissionId <PermissionID> -Permissions <Read|Write|Manage|FullControl>
Mit Get-PnPAzureADAppSitePermission fragst du alle bestehenden App Berechtigungen pro Seite ab.
Mit Schritt 3 erfolgt der Zugriffstest über PnP.PowerShell und Microsoft Graph.
Verbinde dich mit Connect-PnPOnline + der AppID aus Schritt 1 + dem Zertifikat zu der SharePoint Seite.
Connect-PnPOnline -Url <SharePointSiteURL> -ClientId <AzureAppID> -Thumbprint <CertThumbprint> -Tenant "<Tenant>.onmicrosoft.com"
Mit einem einfachen Command wie Get-PnPList erfolgt die Überprüfung. Gibt es Daten zurück ist der Zugriff erfolgreich, andernfalls schreibt es ein 401 Unauthorized (siehe unten).
Als Vergleich verbinde ich mich mit der App auf eine beliebig andere SharePoint Seite. Die Abfrage von Get-PnPList wird verweigert.
Neben PnP.PowerShell ist der Zugriff auch über Microsoft Graph APIs möglich.
Die Berechtigung von Sites.Selected ist dadurch über PnP.PowerShell und Microsoft Graph korrekt umgesetzt.
Soll die Berechtigung für eine App nachträglich wieder entfernt werden ist es über Revoke-PnPAzureADAppSitePermission möglich.
Revoke-PnPAzureADAppSitePermission -PermissionId <PermissionID>