SharePoint REST Service und (401) Unauthorized

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. 👍

Share
Avatar photo

Tobias Asböck

Tobias is a Senior System Engineer with more than 10 years of professional experience with Microsoft 365 products such as SharePoint Online, SharePoint Premium, OneDrive for Business, Teams Collaboration, Entra ID, Information Protection, Universal Print, and Microsoft 365 Licensing. He also has 15+ years of experience planning, administering, and operating SharePoint Server environments. Tobias is a PowerShell Scripter with certifications for Microsoft 365 products. In his spare time, Tobias is busy with updates in the Microsoft 365 world or on the road with his road bike and other sports activities. If you have additional questions, please contact me via LinkedIn or [email protected].

Leave a Reply

Your email address will not be published. Required fields are marked *