YOURLS mit Azure Active Directory

Für eine YOURLS-Installation, wollte ich eine Anbindung an die bestehende Azure Active Directory-Struktur vornehmen. Während es bereits viele Plugins für YOURLS gibt (siehe awesome-yourls hier), scheint noch niemand eine schlüsselfertige Lösung für Azure AD gefunden zu haben. Die Basis ist jedoch mit dem Plugin YOURLS-OIDC von Josh Panter bereits gelegt. Das Problem ist, dass Azure Active Directory zwar als OpenID Connect-kompatibel zertifiziert ist, die Abfrage der Nutzerdaten jedoch anscheinend abweichend vom Standard implementiert wurde. Für diese Lösung habe ich daher auf SAML im Rahmen einer Azure AD Unternehmensanwendung gesetzt.

Voraussetzungen

Die Voraussetzungen sind schnell aufgelistet:

  • funktionierende Installationen von YOURLS und SimpleSAMLphp
  • das von mir modifizierte YOURLS-OIDC plugin von joshp23

Vorbereitungen

Zur Anbindung von Azure AD an SimpleSAML, kann ich den schon etwas in die Tage gekommenen, aber immer noch hilfreichen Blogeintrag von Lewis Roberts empfehlen.

Plugin einrichten

Wenn die Anbindung an Azure steht, muss nur noch der OpenID Connect Adapter von joshp23 an die SAML-Architektur angepasst werden. Ich habe die nötigen Anpassungen in meinem Fall auf GitHub als Momentaufnahme hier zur Verfügung gestellt. Der Name des genutzten Adapters in SimpleSAMLphp muss dann noch in Zeile 20 der plugin.php angepasst werden.

Zum jetzigen Zeitpunkt muss man sich noch gemäß der Anleitung von joshp23 für eine der beiden Nutzermodelle entscheiden. Entweder werden die SAML-Nutzer auf lokale Nutzer gematcht oder alle SAML-Nutzer generell akzeptiert.

Im ersten Fall, fügt man folgenden Code zur config.php hinzu:

$oidc_profiles = array( 'YOURLS_UNAME' => 'sub attribute from OIDC provider', );

Ich habe mich dafür entschieden, die Nutzerverwaltung komplett von YOURLS zu trennen und alle SAML-Nutzer zu akzeptieren, die übergeben werden. In diesem Fall wird stattdessen der folgende Code hinzugefügt:

define( 'OIDC_BYPASS_YOURLS_AUTH', true );

Logout-Buttons

Der Logout-Button führt im Normalfall nur einen lokalen Logout durch. Die Voraussetzungen, um das zu ändern, sind im Modul schon enthalten, müssen allerdings noch dem richtigen Hook zugeordnet werden. Das ist sicher kein großer Schritt, erfordert aber etwas Kenntnis von der Funktionsweise von YOURLS, die noch nicht vorliegt. Ich nehme Hinweise gerne an.