Mobile Apps und Drupal CMS verknüpfen

Profile picture for user Lenard Kratky

Viele Websites nutzen Content-Management-Systeme (CMS), um Inhalte zu verwalten, einzupflegen und anzuzeigen. Typischerweise übernimmt das CMS damit sowohl die Aufgaben eines Frontends als auch des klassischen Backends. Plant man nun das Anbinden externer Systeme, z. B. von mobilen Apps, müssen dafür entsprechende Schnittstellen entwickelt werden.

Die mobilen Apps (Android oder iOS) sollen auf die gleichen Inhalte und Daten zugreifen, die auch das CMS verwaltet. Um Sicherheitslücken zu vermeiden, müssen alle Schnittstellen und Berechtigungen gut durchdacht sein.

In diesem Artikel konzentrieren wir uns darauf, wie man das Drupal CMS für eine Web-Applikation mit Anbindung an Smartphone-Apps nutzen kann.

Warum Drupal?

Drupal ist eines der ältesten und beliebtesten Content-Management-Systeme. Es gilt als das sicherste CMS und punktet insbesondere in Sachen Flexibilität und Erweiterbarkeit. Drupal 9 zeichnet sich im Vergleich zu seinen Vorgängern zudem durch seine erhöhte Performance und moderne Programmierung aus.

Bereits von Haus aus liefert Drupal viele Funktionalitäten wie Ansichten, User-Management mit Berechtigungen und Rollen, die Entity-API, Inhaltsverwaltung und vieles mehr. Durch seine Skalierbarkeit ist Drupal damit auch gut geeignet für komplexe Web-Applikationen.


Implementierung der Schnittstellen in Drupal

Der Drupal Core bietet mit REST und JSON:API bereits zwei sehr mächtige Module, die Schnittstellen für Inhalte ohne viel zusätzlichen Programmieraufwand bereitstellen können.

REST Modul vs. JSON:API

Die RESTful Web Services sind ein mächtiges Tool, um sowohl eigene REST Plugins in Drupal zu definieren als auch bestehende Inhalte in XML oder JSON bereitzustellen. Hier empfiehlt es sich zudem das Modul REST UI zu installieren, um in der Konfiguration unter /admin/config/services/rest einfach benötigte REST Schnittstellen zu aktivieren. Listen von Ressourcen sind hiermit etwas umständlicher zu erstellen, aber können mit Hilfe des Views Moduls sehr individuell konfiguriert werden.

REST UI

REST API in Drupal mit verschiedenen Endpunkten

Mit der REST UI können in Drupal die verschiedenen Endpunkte mit einem Klick aktiviert werden.

Ressource mit REST API in Drupal aktivieren

Für jede Ressource können die erlaubten Methoden, Formate sowie Authentifizierung gewählt werden.

JSON:API

Wenn allerdings nur bestehende Entitäten bereitgestellt werden sollen, empfiehlt sich die JSON:API, welche generische Schnittstellen für das Anzeigen, Auflisten, Filtern, Sortieren und die Pagination von Ressourcen bietet.

GET und POST

/jsonapi/{entity_type_id}/{bundle_id}

z. B. /jsonapi/node/article

PATCH und DELETE

/jsonapi/{entity_type_id}/{bundle_id}/{entity_uuid}

z. B. /jsonapi/node/article/{uuid}

Zugriff und Berechtigungen

Normalerweise sind bestimmte Ressourcen auch nur für bestimmte Nutzer (Redakteure, Administratoren etc.) sichtbar. Bereits beim Einstellen sollten also nur REST Schnittstellen für Ressourcen erstellt werden, die auch zwingend notwendig sind:

  • Wenn auf die Ressource nicht außerhalb des Drupal-Systems zugegriffen wird, braucht es erst gar keine Schnittstelle.
  • Wenn Ressourcen nur geladen, aber nicht verändert werden müssen, benötigen die Schnittstellen keine Schreibberechtigungen (also keine POST/PATCH Endpunkte). Das gilt ebenso für das Löschen (DELETE).
  • Für alle Endpunkte überprüfen, dass diese nur von eingeloggten Nutzern aufgerufen werden können. Besonders bei Ansichten mit Views müssen Berechtigungen meist manuell gesetzt werden, um sie nicht allen anzuzeigen.

Authentifizierung mit OAuth

Wenn der Nutzer im Browser die Website aufruft, loggt sich dieser ein und erhält daraufhin ein Cookie. Dieses sorgt dafür, dass der Nutzer eingeloggt bleibt und die zugewiesenen Berechtigungen für die Seite erhält.

Eine App hingegen kann nicht mit Cookies arbeiten. Aus Sicherheitsgründen sollte auch auf keinen Fall das Passwort des Nutzers gespeichert und jedes Mal mitübertragen werden! Die Lösung sind sogenannte Tokens, welche eine Sitzung definieren und auch ein komfortables Neu-Einloggen ohne Passwort ermöglichen.

  • Access Tokens sind nur sehr kurze Zeit (z. B. 2 Minuten) gültig und können durch die App bei jeder Anfrage mitgesendet werden, um den Nutzer zu identifizieren.
  • Refresh Tokens sind hingegen deutlich länger (z. B. 30 Tage) gültig und können genutzt werden, um ein erneutes Access Token zu generieren.

Sollte also ein Access Token abgefangen werden, ist dieses sowieso nach kurzer Zeit ungültig. Das Refresh Token kann hingegen durch die App im Handy gespeichert und zum Generieren neuer Access Tokens oder automatischen Einloggen genutzt werden.

In Drupal kann das mit dem OAuth Modul umgesetzt werden. Dieses implementiert den OAuth 2.0 Standard und ermöglicht die Authentifizierung von Nutzern aus verschiedenen Services, z. B. mobilen Apps oder anderen Web-Apps.

OAuth Modul in Drupal konfigurieren

In OAuth kann für die Android und iOS App jeweils ein eigener Client angelegt werden.


Implementierung in Android und iOS

Während bei Drupal für die meisten Standardfälle größtenteils Konfiguration und keine bis wenig Programmierung anfällt, ist es für die Android bzw. iOS Apps nicht so einfach. Letztlich müssen alle Drupal-Endpunkte durch die App unterstützt werden und über HTTP-Anfragen angesprochen werden können.

Login oder Registrierung

Beim ersten Öffnen der App kann ein Login-Screen angezeigt werden, welcher Nutzername und Passwort abfragt. Danach werden die Zugangsdaten an den Server geschickt, welcher bei Erfolg mit dem Access und Refresh Token antwortet. Das Access Token kann bis zum Ablaufen für Anfragen von Ressourcen genutzt werden und mit dem Refresh Token erneuert werden.

Die App darf zwar das Refresh Token (sicher!) speichern, aber auf keinen Fall das Passwort und möglichst auch keine anderen sensiblen Informationen wie Nutzername oder E-Mail.

Auch eine Registrierung in der App ist möglich. Dazu muss der /user/register POST-Endpunkt zur Benutzerregistrierung im REST Modul aktiviert werden. Die App kann den Endpunkt dann mit den eingegebenen Daten (E-Mail, Benutzername, Passwort) ansprechen.

Anfrage von Ressourcen

Für die meisten Ressourcen und insbesondere bei Schreibberechtigungen wird eine Authentifizierung verlangt. Deshalb wird das Access Token immer mitgesendet. Beim Generieren des Access Tokens muss zudem vorher im Scope definiert sein, welche Berechtigungen/Rollen für die gewünschten Aktionen benötigt werden.

Die Ressourcen werden meist in JSON oder XML ausgegeben. Sowohl für Android als auch iOS lassen sich entsprechende Parser implementieren, die die Daten sinnvoll auslesen und weiterverarbeiten können.

Fehler abfangen

Natürlich können bei HTTP-Anfragen alle möglichen Fehler auftreten. Wir haben einige relevante Fehler zusammengefasst, die Sie bei Ihrer Implementierung beachten müssen.

  • Keine oder sehr langsame Internetverbindung
  • Falsche Anmeldedaten beim Login
  • Drupal-Website im Wartungsmodus
  • Fehlende Ressource oder Daten
  • Access Token oder Ressource Token abgelaufen
  • Fehlende Berechtigung

Zudem müssen alle Anfragen unbedingt verschlüsselt über HTTPS erfolgen!


Wie mit der Programmierung der Drupal-App starten?

Wenn Sie bereits eine Drupal-Website haben, sollten Sie zunächst die empfohlenen REST Module aktivieren. Anschließend überlegen Sie sich, welche Daten in der App benötigt oder durch die App verändert werden müssen. Konfigurieren Sie mit diesem Wissen die benötigten Schnittstellen sorgfältig, denn eine falsche Konfiguration bedeutet ein erhebliches Sicherheitsrisiko! Die Endpunkte können nun in den Apps angesprochen werden.

Wir haben bereits einige CMS und Drupal-Websites mit verschiedenen individuellen Apps verknüpft und können Sie gerne bei Ihrem Vorhaben unterstützen. Nutzen Sie unser Kontaktformular oder schreiben Sie uns an info@lakdev.de und wir melden uns zeitnah bei Ihnen.

Tags