Möchte sich jemand über PowerShell oder Code mit SharePoint Online verbinden ist es neben Microsoft Graph auch über den Vorgänger SharePoint REST Service möglich. Bei SharePoint REST macht es einen Unterschied ob sich jemand via Client Secret oder Zertifikat authentifiziert.
Wie vor einigen Tagen beschrieben kann es mit einer Azure App und dem Recht Sites.FullControl.All zu Berechtigungsfehlern bei manchen Aktionen führen. Im letzten Beispiel nutzte ich die Microsoft Graph API. Neben der Graph API gibt es den Vorgänger SharePoint REST Service.
SharePoint REST Service war in SharePoint On-premise möglich und gibt es in SharePoint Online weiterhin. Auch bei SharePoint REST bedeutet Sites.FullControl.All nicht immer volle Rechte. Es spielt für SharePoint Online eine Rolle ob sich jemand mit Client Secret oder Zertifikat authentifiziert. Bekanntlich gibt es bei Azure Apps die Authentifizierungstoken über Client Secret oder Zertifikat.
Ich erstellte mir für das Beispiel wieder eine Azure App, neu mit der oben erwähnten SharePoint API Application / Sites.FullControl.All. Zudem erstellte ich für den Zugriff über PnP PowerShell einen Client Secret Key. Damit kann die Verbindung zu einer beliebigen SharePoint Site im Tenant hergestellt werden.
Connect-PnPOnline -Url [SharePointSiteUrl] -ClientId [ApplicationID] -ClientSecret [AppClientSecret]
Bei der Anwendung wird schnell erkannt es klappt nicht wie erwartet. PnP wird einen Fehler (401) Unauthorized zeigen.
Würde die Anfrage ohne PnP gestellt gibt es einen Fehler “Unsupported app only token” zurück.
Die Ursache ist die Anmeldemethode via Client Secret. Berechtigungen an der SharePoint REST API gibt es nur über eine Anmeldung mit Zertifikat. Wie du selbst in kurzer Zeit ein Zertifikat für die Azure App erstellen kannst beschreibe ich in einem eigenen Beitrag.
Nachdem das Zertifikat an die Azure App angefügt wurde startet ein neuer Versuch über PnP eine Verbindung herzustellen. Stelle in der App sicher ob die SharePoint API Application / Sites.FullControl.All berechtigt ist.
Eine Authentifizierung mit Zertifikat unterscheidet sich bei PnP nur ein wenig. Bei Connect-PnPOnline ersetzt Thumbprint und Tenantname die Angabe ClientSecret. Der private Schlüssel (bzw. das Zertifikat) muss sich dafür auf dem lokalen Rechner befinden.
Connect-PnPOnline [SharePointSiteUrl] -ClientId [ApplicationID] -Thumbprint [CertificateThumbprint] -Tenant [Tenantname].onmicrosoft.com
Im Gegensatz zur Authentifizierung mit Secret Client werden bei SharePoint REST über das Zertifikat Aktionen in SharePoint Online möglich sein.
Somit ist bei Anwendung der älteren SharePoint REST API die Anmeldung via Zertifikat die einzige Möglichkeit. Damit klappt es. 👍