Softwarearchitektur

Da wir möglichst keine neue Schnittstelle implementieren wollten, war es das Ziel, die bestehenden Schnittstellen in ownCloud um OAuth 2.0 zu erweitern. Zunächst war dafür die Implementierung des OAuth 2.0 Protokolls mit seinen Schnittstellen notwendig. Außerdem musste zur Umsetzung der Integrationsszenarien der Zugriff auf WebDAV und die OCS Share API über OAuth 2.0 bereitgestellt werden. Es wird damit folgendes Integrationsszenario realisiert:

Als Nutzer möchte ich OAuth 2.0 benutzen können, um Moodle Zugriff auf ownCloud zu gewähren.

Bestandteile

OAuth 2.0 App

Zur Implementierung von OAuth 2.0 entschieden wir uns in Absprache mit einem ownCloud Entwickler, eine ownCloud App namens oauth2 zu erstellen. Der Vorteil einer solchen Lösung ist, dass OAuth 2.0 zu einer bestehenden ownCloud Installation einfach hinzugefügt und auch wieder entfernt werden kann. Die Möglichkeit, RESTful APIs und eigene Datenmodelle in Apps zu definieren, stellten alle notwendigen Werkzeuge für die Umsetzung des OAuth 2.0 Protokolls bereit. Background Jobs, Hooks und Logging erlaubten die Implementierung weiterer Funktionen.

Core Anpassungen

Um auf die WebDAV Schnittstelle und die OCS Share API über OAuth 2.0 zugreifen zu können, untersuchten wir die Implementierungen dieser Schnittstellen im ownCloud Core. Dabei haben wir Änderungen bei der ownCloud-internen dav App und dem Authentifizierungsmechanismus für ownCloud APIs durchgeführt. Dabei war es ein wichtiges Anliegen, keine Abhängigkeiten zwischen dem ownCloud Core und der OAuth 2.0 App einzuführen. Für die Änderungen wurde der Pull Request owncloud/core#26742 erstellt. Ein Backport für ownCloud 9.1 ist im Pull Request owncloud/core#27370 zu finden.

Folgende Tabelle fasst die Funktionen der einzelnen Bestandteile zusammen.

Bestandteil Funktion
OAuth 2.0 App Implementierung des OAuth 2.0 Protokolls mit der notwendigen Authentifizierungslogik für die WebDAV Schnittstelle und ownCloud APIs
Core Anpassungen Erweiterung der Authentifizierung in der dav App und für ownCloud APIs um das Laden benutzerdefinierter Authentifizierungsmethoden