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.

See also: NGINX Plus OpenID Connect on GitHub.

Voraussetzungen

Die Anweisungen gehen davon aus, dass Sie folgendes haben:

  • Ein laufender Casdoor-Server. See Server installation and Try with 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. Log in to your Casdoor account at 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. Record the Client ID and Client Secret; you will use them in Step 4 of Configuring NGINX Plus.

    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 – Use the value of the authorization_endpoint from Step 3 (in this guide, https://<casdoor-server-address>/login/oauth/authorize)
    • map $host $oidc_token_endpoint – Use the value of the token_endpoint from Step 3 (in this guide, http://<casdoor-server-address>/api/login/oauth/access_token)
    • map $host $oidc_client – Use the value in the Client ID field from Step 4 of Configuring Casdoor
    • map $host $oidc_client_secret – Use the value in the Client Secret field from Step 2 of Configuring 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 and later, NGINX Plus can directly read the JWK file from the URL specified as jwks_uri in Step 3. 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. Update the "default" parameter of the map $host $oidc_jwt_keyfile directive to the value obtained from the jwks_uri field in Step 3 (in this guide, 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. Copy the JSON contents from the JWK file specified in the jwks_uri field in Step 3 (in this guide, http://<casdoor-server-address>/.well-known/jwks) to a local file (e.g., /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

See the Troubleshooting section in the nginx-openid-connect repository.