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-njsFü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:
-
Log in to your Casdoor account at
http://your-casdoor-url.com/login/. -
Klicken Sie in der oberen Navigationsleiste auf Anwendung. Auf der sich öffnenden Seite Anwendung klicken Sie oben links auf die Schaltfläche Hinzufügen.

-
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.

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).

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.
-
Record the Client ID and Client Secret; you will use them in Step 4 of Configuring NGINX Plus.

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

-
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.

-
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.
-
Auf der sich öffnenden Seite Hinzufügen ändern Sie den Name und Anzeigename nach Belieben (hier ist es user1).

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

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

-
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).

Konfigurieren von NGINX Plus
Um NGINX Plus als OpenID Connect vertrauende Partei zu konfigurieren, folgen Sie diesen Schritten:
-
Beginnen Sie damit, einen Klon des nginx-openid-connect GitHub-Repositorys zu erstellen:
git clone https://github.com/nginxinc/nginx-openid-connect -
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
-
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 angegebenenpython-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",
"...":"...",
} -
Ö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 theauthorization_endpointfrom Step 3 (in this guide,https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint– Use the value of thetoken_endpointfrom 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 Casdoormap $host $oidc_client_secret– Use the value in the Client Secret field from Step 2 of Configuring Casdoormap $host $oidc_hmac_key– Verwenden Sie einen einzigartigen, langen und sicheren Ausdruck
-
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_uriin Step 3. Nehmen Sie die folgenden Änderungen an /etc/nginx/conf.d/frontend.conf vor:- Kommentieren Sie die auth_jwt_key_file-Direktive aus (oder entfernen Sie sie).
- Heben Sie die Kommentierung der auth_jwt_key_request-Direktive auf. (Der Parameter
/_jwks_uribezieht sich auf den Wert der Variablen$oidc_jwt_keyfile, der im nächsten Schritt festgelegt wird.) - Update the "default" parameter of the
map $host $oidc_jwt_keyfiledirective to the value obtained from thejwks_urifield 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:
- Copy the JSON contents from the JWK file specified in the
jwks_urifield 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). - Ä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.
- Copy the JSON contents from the JWK file specified in the
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
-
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.

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