Zum Hauptinhalt springen

Nginx

Aktivieren Sie OpenID Connect-basiertes Single Sign-On für Anwendungen, die von NGINX Plus mit Casdoor als Identity Provider (IdP) bereitgestellt werden.

Dieser Leitfaden erklärt, wie Sie Single Sign-On (SSO) für Anwendungen aktivieren, die von NGINX Plus bereitgestellt werden. Die Lösung verwendet OpenID Connect als Authentifizierungsmechanismus, mit Casdoor als Identity Provider (IdP) und NGINX Plus als vertrauende Partei.

Siehe auch: Weitere Informationen zur NGINX Plus OpenID Connect-Integration finden Sie im GitHub-Repository des Projekts.

Voraussetzungen

Die Anweisungen gehen davon aus, dass Sie folgendes haben:

  • Ein laufender Casdoor-Server. Siehe die Casdoor-Dokumentation für Serverinstallation und Ausprobieren mit Docker.

  • Ein NGINX Plus-Abonnement und NGINX Plus R15 oder später. Für Installationsanweisungen siehe das NGINX Plus Admin Guide.

  • Das NGINX JavaScript-Modul, das für die Handhabung der Interaktion zwischen NGINX Plus und dem IdP erforderlich ist. Nach der Installation von NGINX Plus installieren Sie das Modul mit dem für Ihr Betriebssystem geeigneten Befehl.

    Für Debian und Ubuntu:

    sudo apt install nginx-plus-module-njs

    Für CentOS, RHEL und Oracle Linux:

    sudo yum install nginx-plus-module-njs
  • Die folgende Direktive sollte im obersten ("main") Konfigurationskontext in /etc/nginx/nginx.conf enthalten sein, um das NGINX JavaScript-Modul zu laden:

    load_module modules/ngx_http_js_module.so;

Konfigurieren von Casdoor

Hinweis: Das folgende Verfahren spiegelt die Casdoor-GUI zum Zeitpunkt der Veröffentlichung wider, aber die GUI kann sich ändern. Verwenden Sie diese Anleitung als Referenz und passen Sie sie bei Bedarf an die aktuelle Casdoor-GUI an.

Um einen Casdoor-Client für NGINX Plus in der Casdoor-GUI zu erstellen, folgen Sie diesen Schritten:

  1. Melden Sie sich bei Ihrem Casdoor-Konto an unter http://your-casdoor-url.com/login/.

  2. Klicken Sie in der oberen Navigationsleiste auf Anwendung. Auf der sich öffnenden Seite Anwendung klicken Sie oben links auf die Schaltfläche Hinzufügen.

    addApp

  3. Auf der sich öffnenden Seite Anwendung bearbeiten ändern Sie den Wert in den Feldern Name und Anzeigename auf den Namen der Anwendung, für die Sie SSO aktivieren. Hier verwenden wir NGINX Plus.

    appName

    Im Feld Weiterleitungs-URLs geben Sie die URL der NGINX Plus-Instanz einschließlich der Portnummer ein und enden mit /_codexch (in dieser Anleitung ist es https://your-site-url.com:443/_codexch).

    redirectURL

    Notizen:

    • Für den Produktiveinsatz empfehlen wir dringend die Verwendung von SSL/TLS (Port 443).
    • Die Portnummer ist auch dann obligatorisch, wenn Sie den Standardport für HTTP (80) oder HTTPS (443) verwenden.
  4. Notieren Sie die Werte in den Feldern Client-ID und Client Secret. Sie werden diese in die NGINX Plus-Konfigurationsdatei in Schritt 4 von Konfigurieren von NGINX Plus kopieren.

    Client

  5. Klicken Sie in der oberen Navigationsleiste auf Rollen, dann klicken Sie oben links auf der sich öffnenden Seite auf die Schaltfläche Hinzufügen.

    addRole

  6. Auf der sich öffnenden Seite Hinzufügen geben Sie einen Wert in die Felder Name und Anzeigename ein (hier ist es nginx-casdoor-role) und klicken Sie auf die Schaltfläche Speichern.

    roleName

  7. Klicken Sie in der oberen Navigationsleiste auf Benutzer. Auf der sich öffnenden Seite Benutzer klicken Sie entweder auf Bearbeiten, um einen der vorhandenen Benutzer zu bearbeiten, oder oben links auf die Schaltfläche Hinzufügen, um einen neuen Benutzer zu erstellen.

  8. Auf der sich öffnenden Seite Hinzufügen ändern Sie den Name und Anzeigename nach Belieben (hier ist es user1).

    userName

    Wählen Sie NGINX Plus im Feld Anwendung für die Anmeldung.

    signupApp

    Im Feld Verwaltete Konten wählen Sie NGINX Plus unter Anwendung und füllen Sie den Benutzernamen und das Passwort aus.

    managedAcc

  9. Gehen Sie zurück zur Seite Rollen und klicken Sie auf Bearbeiten in der Zeile nginx-casdoor-role. Auf der sich öffnenden Seite wählen Sie im Feld Untergeordnete Benutzer den Benutzernamen aus, den Sie gerade erstellt haben (hier ist es built-in/user1).

    subUsers

Konfigurieren von NGINX Plus

Um NGINX Plus als OpenID Connect vertrauende Partei zu konfigurieren, folgen Sie diesen Schritten:

  1. Beginnen Sie damit, einen Klon des nginx-openid-connect GitHub-Repositorys zu erstellen:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. Kopieren Sie die folgenden Dateien aus dem Klon in das Verzeichnis /etc/nginx/conf.d:

    • frontend.conf
    • openid_connect.js
    • openid_connect.server_conf
    • openid_connect_configuration.conf
  3. Rufen Sie die URLs für den Autorisierungsendpunkt, den Token-Endpunkt und die JSON Web Key (JWK)-Datei aus der Casdoor-Konfiguration ab. Öffnen Sie ein Terminal und führen Sie den folgenden curl-Befehl aus, leiten Sie die Ausgabe an den angegebenen python-Befehl weiter, um ein lesbares Konfigurationsformat zu erzeugen. Aus Gründen der Kürze haben wir die Ausgabe auf nur die relevanten Felder beschränkt.

    curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
    {
    "authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
    "...":"...",
    "token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
    "...":"...",
    "jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
    "...":"...",
    }
  4. Öffnen Sie /etc/nginx/conf.d/openid_connect_configuration.conf mit Ihrem bevorzugten Texteditor. Ändern Sie den "default"-Parameterwert für jede der folgenden map-Direktiven mit den angegebenen Werten:

    • map $host $oidc_authz_endpoint – Verwenden Sie den Wert des authorization_endpoint aus Schritt 3 (in dieser Anleitung, https://<casdoor-server-address>/login/oauth/authorize)
    • map $host $oidc_token_endpoint – Verwenden Sie den Wert des token_endpoint aus Schritt 3 (in dieser Anleitung, http://<casdoor-server-address>/api/login/oauth/access_token)
    • map $host $oidc_client – Verwenden Sie den Wert im Feld Client ID aus Schritt 4 von Konfigurieren von Casdoor
    • map $host $oidc_client_secret – Verwenden Sie den Wert im Feld Client Secret aus Schritt 2 von Konfigurieren von Casdoor
    • map $host $oidc_hmac_key – Verwenden Sie einen einzigartigen, langen und sicheren Ausdruck
  5. Konfigurieren Sie die JWK-Datei basierend auf der verwendeten Version von NGINX Plus:

    • In NGINX Plus R17 und später kann NGINX Plus die JWK-Datei direkt von der als jwks_uri in Schritt 3 angegebenen URL lesen. Nehmen Sie die folgenden Änderungen an /etc/nginx/conf.d/frontend.conf vor:
      1. Kommentieren Sie die auth_jwt_key_file-Direktive aus (oder entfernen Sie sie).
      2. Heben Sie die Kommentierung der auth_jwt_key_request-Direktive auf. (Der Parameter /_jwks_uri bezieht sich auf den Wert der Variablen $oidc_jwt_keyfile, der im nächsten Schritt festgelegt wird.)
      3. Aktualisieren Sie den "default"-Parameter der map $host $oidc_jwt_keyfile-Direktive auf den Wert, der aus dem Feld jwks_uri in Schritt 3 erhalten wurde (in dieser Anleitung, http://<casdoor-server-address>/.well-known/jwks).
    • In NGINX Plus R16 und früher oder falls bevorzugt, muss die JWK-Datei auf der lokalen Festplatte liegen. Folgen Sie diesen Schritten:
      1. Kopieren Sie den JSON-Inhalt aus der JWK-Datei, die im Feld jwks_uri in Schritt 3 angegeben ist (in dieser Anleitung, http://<casdoor-server-address>/.well-known/jwks), in eine lokale Datei (z.B. /etc/nginx/my_casdoor_jwk.json).
      2. Ändern Sie in /etc/nginx/conf.d/openid_connect_configuration.conf den "default"-Parameter der map $host $oidc_jwt_keyfile-Direktive auf den Pfad der lokalen Datei.
  6. Stellen Sie sicher, dass der Benutzer, der in der user-Direktive innerhalb der NGINX Plus-Konfigurationsdatei (normalerweise /etc/nginx/nginx.conf) angegeben ist, Leseberechtigungen für die JWK-Datei hat.

Testen

Öffnen Sie einen Browser und geben Sie die Adresse Ihrer NGINX Plus-Instanz ein. Versuchen Sie dann, sich mit den Anmeldeinformationen eines Benutzers anzumelden, dem die NGINX Plus-Rolle zugewiesen wurde.

test

Fehlerbehebung

Bitte beachten Sie den Abschnitt Fehlerbehebung im nginx-openid-connect-Repository auf GitHub.