SharePoint Online / Office 365 & Web Services – Remotezugriff mit Authentifizierung

Milen KoychevOffice 365, Windows Phone

In diesem Beitrag diskutieren wir über das Thema Remotezugriff auf SharePoint Online bzw. Office 365 Instanzen via Web Services und Client Object Model.

Möchte man die Dienste einer SharePoint Instanz aus einer Client-Applikation benutzen, sind die Web Services oder das Client Object Model die geeigneten Instrumente, um einen Remotezugriff auf SharePoint zu realisieren. Dabei muss sich die Client-Applikation in den meisten Fällen direkt beim SharePoint authentifizieren. Versucht man dasselbe mit einer SharePoint Online Instanz – sprich mit den Windows Live ID Daten direkt eine Anmeldung beim SharePoint Online durchzuführen, wird diese abgelehnt. Ein Beispiel – folgender Code wird den Fehler The remote server returned an error: (401) Unauthorized  produzieren.

NetworkCredential clientCred = new NetworkCredential("user", "password", "mycompany.onmicrosoft.com");

ClientContext clientContext = new ClientContext(https://mycompany.sharepoint.com/);

clientContext.Credentials = clientCred;

Web site = clientContext.Web;

clientContext.Load(site);

clientContext.ExecuteQuery();

Dieses Verhalten ist zwar auf den ersten Blick überraschend, aber korrekt. Bei SharePoint Online Instanzen läuft der Prozess einer Authentifizierung anders ab: diese Instanzen bieten kein eigenes Authentifizierungsmechanismus an sondern realisieren die Authentifizierung durch den Microsoft Live ID Dienst. Dies bedeutet, dass eine Client-Applikation sich erst beim  Live ID-Dienst mit gültigen Benutzerdaten anmelden muss, um Remotezugriff via Web Services oder Client Object Model auf eine SharePoint Online Instanz zu bekommen (s. Abbildung 1).

Authentifizierung und Remotezugriff auf SharePoint OnlineAbbildung 1: Authentifizierung und Remotezugriff auf SharePoint Online 

Im ersten Schritt wendet sich die Applikation an den Live ID Dienst mit gültigen Benutzerdaten und fordern einen so genannten SAML-Token an. Diesen Token sendet die Applikation im zweiten Schritt an die SharePoint Online Instanz. Die SharePoint Instanz versucht den erhaltenen Token zu validieren. Wenn dieser Vorgang erfolgreich ist, generiert die SharePoint Instanz mehrere Cookies, die die erfolgreiche Authentifizierung der Client-Applikation signalisieren, und sendet diese Cookies an die Applikation zurück.  Ab diesem Zeitpunkt kann die Applikation auf die Web Services von SharePoint Online zugreifen, vorausgesetzt die generierten Cookies werden bei jedem Zugriff mit gesendet. 

Nun an dieser Stelle sollte die Theorie ausreichen, um jedem einen Einblick in das Authentifizierungsmechanismus von SharePoint Online zu geben. Gute Beispiele mit Code finden Sie wie folgt:

  • im Chris Jonson Blog (Authentifizierung mit Benutzerinteraktion) hier 
  • im Wictor Wilén Blog (Authentifizierung ohne Benutzerinteraktion)  hier 
  • weiterführende Microsoft Informationen zum Thema Authentifizierung hier

Wir nutzen erfolgreich die Authentifizierungsmechanismen von SharePoint Online innerhalb unserer My Site App, um Apps auf Windows Phone 7, iPhone und Android mit SharePoint Online zu koppeln.  Dadurch haben wir die Möglichkeit, eine komplette Cloud-Lösung neben der On-Premise Variante unseren Kunden anzubieten.