Zum Hauptinhalt springen

NginxCommunityVersion

Voraussetzungen

Dieser Leitfaden setzt voraus, dass Sie die folgenden Bedingungen haben:

  • Laufender Casdoor-Dienst. Wenn Sie den Casdoor-Dienst noch nicht installiert haben, beziehen Sie sich bitte auf Server Installation oder Versuchen Sie es mit Docker.
  • Nginx Open-Source-Edition mit aktiviertem ngx_http_auth_request_module Modul zur Kompilierungszeit. Wenn Sie nicht wissen, wie Sie das ngx_http_auth_request_module Modul aktivieren, beziehen Sie sich bitte auf das Nginx Modul Dokument.
  • Die Website, auf der Sie die Authentifizierung aktivieren möchten, ist erfolgreich auf Nginx bereitgestellt, mit einem konfigurierten Domainnamen (anstatt einer IP-Adresse) und kann normal aufgerufen werden.
  • OAuth2-Proxy-Tool (derzeit sind die folgenden zwei beliebten Projekte mit vielen Sternen auf GitHub verfügbar, und Sie müssen eines davon auswählen):
  1. oauth2-proxy/oauth2-proxy (in diesem Artikel verwendet) GitHub ODER Offizielle-Webseite
  2. vouch/vouch-proxy GitHub

I. Casdoor konfigurieren

Hinweis: Die Operationen in diesem Artikel basieren auf der Casdoor GUI zum Zeitpunkt der Veröffentlichung, aber die Casdoor GUI kann sich je nach Version ändern. Bitte folgen Sie den in diesem Artikel bereitgestellten Referenzen, um Ihre bereitgestellte Casdoor-Version zu konfigurieren.

Hinweis: Die Schlüssel, Passwörter, Benutzernamen und andere vertrauliche Informationen, die in diesem Artikel erwähnt werden, sind alle Beispiele. Aus Sicherheitsgründen müssen Sie sie durch Ihre eigenen relevanten Inhalte ersetzen, wenn Sie sie bereitstellen.

  1. Melden Sie sich bei Ihrem Casdoor-Admin-Konto an.

  2. In der oberen Leiste wählen Sie "Identitätsauthentifizierung" > "Anwendungen" und klicken Sie dann auf "Hinzufügen" auf der Seite "Anwendungen".

    addApp

  3. Vervollständigen Sie die Anwendungskonfiguration basierend auf Ihren Projektinformationen. In diesem Artikel verwenden wir "Nginx-Community" als Beispielanwendungsnamen.

    ConfigureApp

  4. Beachten Sie die Werte der Felder "Client ID" und "Client Secret". Sie werden später bei der Konfiguration von OAuth2-Proxy verwendet. Dann konfigurieren Sie die "Redirect URL" als https://project.yourdomain.com/oauth2/callback/.

    RecordInfo

  5. In der oberen Leiste wählen Sie "Casbin-Berechtigungsmanagement" > "Rollen" und klicken Sie dann auf "Hinzufügen" auf der Seite "Rollen".

    AddRole

  6. Vervollständigen Sie die Rollenkonfiguration basierend auf Ihren Projektinformationen. In diesem Artikel verwenden wir "nginx_role" als Beispielrollennamen.

    ConfigureRole

  7. (Optional) In der oberen Leiste wählen Sie "Benutzerverwaltung" > "Benutzer" und fügen dann neue Benutzer basierend auf Ihren Bedürfnissen hinzu. Wenn die Benutzer, die Sie benötigen, bereits existieren, können Sie diesen Schritt überspringen. In diesem Artikel erstellen wir einen Beispielbenutzer namens "user".

  8. Gehen Sie zurück zur Seite "Rollen", die in Schritt 5 erwähnt wurde, bearbeiten Sie die Rolle nginx_role und fügen Sie die benötigten Benutzer zur Option "Eingeschlossene Benutzer" hinzu. In diesem Artikel fügen wir hier den zuvor erstellten builtin/user hinzu.

II. Oauth2-Proxy konfigurieren

Hinweis: Dieser Artikel verwendet das Oauth2-Proxy-Projekt als Beispiel. Wenn Sie Vouch anstelle von Oauth2-Proxy verwenden möchten, beziehen Sie sich bitte auf deren offizielle Dokumentation auf GitHub.

Hinweis: Dieser Artikel setzt voraus, dass Ihre Website mit einem vertrauenswürdigen SSL-Zertifikat konfiguriert ist und nur HTTPS-Zugriff erlaubt oder dass Sie eine automatische Weiterleitung von HTTP-Besuchern zu HTTPS eingerichtet haben. Dies hilft, den Schutz von Cookies zu maximieren und verhindert das böswillige Auslesen von Anmeldetokens. Wenn Ihre Website über das unsichere HTTP-Protokoll aufgerufen werden muss, ändern Sie bitte die entsprechenden Befehle. Weitere Hilfe zur Bereitstellung über HTTP finden Sie in der offiziellen Dokumentation von Oauth2-Proxy auf GitHub.

Tipps: OAuth2-Proxy bietet verschiedene Bereitstellungsmethoden (wie Quellcodekompilierung, Docker-Installation usw.). Zur Vereinfachung der Erklärung verwendet dieser Artikel das "vorgefertigte Binär" für die Bereitstellung.

  1. Gehen Sie zur GitHub Releases Seite und laden Sie das Binärpaket herunter, das Ihrem Betriebssystem und Ihrer CPU-Architektur entspricht. Stand 1. Januar 2024 ist die neueste Release-Version von OAuth-Proxy V7.5.1. Wenn Sie das Binärpaket für diese Version herunterladen möchten, können Sie den folgenden Befehl für Linux mit AMD64 ausführen:

    wget -O oauth2-proxy-linux.tar.gz https://github.com/oauth2-proxy/oauth2-proxy/releases/download/v7.5.1/oauth2-proxy-v7.5.1.linux-amd64.tar.gz

    Es wird dringend empfohlen, dass Sie den von der offiziellen Website auf der GitHub Releases Seite bereitgestellten SHA256SUM Wert nach dem Herunterladen des komprimierten Pakets überprüfen und ihn Zeichen für Zeichen mit dem SHA256SUM Wert des von Ihnen heruntergeladenen Pakets vergleichen.

  2. Extrahieren Sie das heruntergeladene Paket:

    tar -zxvf oauth2-proxy-*.tar.gz
  3. Betreten Sie das extrahierte Verzeichnis:

    cd oauth2-proxy-v7.5.1.linux-amd64
  4. Verschieben Sie die erhaltene Binärdatei nach /usr/local/bin und konfigurieren Sie sie mit ausführbaren Berechtigungen. Möglicherweise müssen Sie Berechtigungen mit sudo erhöhen, je nach Ihrer Situation.

    cp ./oauth2-proxy /usr/local/bin
    cd /usr/local/bin
    chmod +x ./oauth2-proxy
  5. Testen Sie die Binärinstallation. Wenn die Installation erfolgreich ist, sollten Sie nach Ausführung des folgenden Befehls eine Ausgabe ähnlich oauth2-proxy v7.5.1 (gebaut mit go1.21.1) sehen.

    cd ~
    oauth2-proxy --version
  6. Führen Sie oauth2-proxy mit Befehlszeilenparametern aus. Parameter, die mit [erforderlich] gekennzeichnet sind, müssen gemäß Ihrer spezifischen Situation konfiguriert werden, während Parameter, die mit [optional] gekennzeichnet sind, die Leistung optimieren können, aber auch weggelassen werden können. Um sicherzustellen, dass oauth2-proxy im Hintergrund laufen kann, können Sie Prozessüberwachungstools wie Screen oder Supervisor oder Terminaltools verwenden.

    oauth2-proxy \ 
    --provider=oidc \ #[required] Do not change
    --client-id=abc123456def \ #[required] "Client ID" obtained in step I.4 above
    --client-secret=abc123456def \ #[required] "Client Secret" obtained in step I.4 above
    --oidc-issuer-url=https://auth.yourdomain.com \ #[required] Your Casdoor URL (domain name or public IP)
    --redirect-url=https://project.yourdomain.com/oauth2/callback \ #[required] https://domain-of-the-project-to-protect/oauth2/callback
    --scope=email+profile+groups+openid \ #[required] Obtained from Casdoor: user email, user profile, groups, and login authentication
    --cookie-domain=project.yourdomain.com \ #[required] Domain name of the project you want to protect
    --whitelist-domain=project.yourdomain.com \ #[required] Domain name of the project you want to protect
    --cookie-secret=abc123456def \ #[required] Please generate a random string of numbers and letters and fill it in here
    --email-domain=* \ #[required] List of acceptable user email domains (* means accept all domains). If the user's email suffix is not in this list, a 403 error will be returned even if the login is successful.
    --insecure-oidc-allow-unverified-email=true \ #[required] Whether to accept users with unverified email addresses
    --http-address=http://127.0.0.1:65534 \ #[required] Address that oauth2-proxy listens on. The port number here can be set arbitrarily. Please record the value you set, as it will be needed for configuring Nginx later.
    --cookie-expire=24h0m0s \ #[optional] Cookie expiration time. After this period, users will need to log in again.
    --custom-sign-in-logo=https://cdn.yourdomain.com/pic/proj.png \ #[optional] Icon displayed on the login page. It is recommended to use a rectangular image rather than a square one.
    --session-store-type=redis \ #[optional] Use Redis cache. If you don't need Redis, you can delete this item.
    --redis-connection-url=redis://127.0.0.1:6379/0 \ #[optional] Redis URL. If you don't need Redis, you can delete this item.
    --redis-password=123456 #[optional] Redis connection password. If you don't need Redis or Redis has no password, you can delete this item.

III. Nginx konfigurieren

Hinweis: Bitte bestätigen Sie erneut, dass Ihr Nginx das ngx_http_auth_request_module Modul beim Kompilieren und Installieren aus dem Quellcode aktiviert hat (der Kompilierungsbefehl enthält --with_http_auth_request_module). Wenn Sie nicht wissen, wie Sie das ngx_http_auth_request_module Modul aktivieren, beziehen Sie sich bitte auf das Nginx Modul Dokument.

Tipps: Nginx, das mit dem Baota-Panel-Tool installiert wurde, aktiviert dieses Modul standardmäßig nicht.

  1. Öffnen Sie die Konfigurationsdatei der bereits bereitgestellten und zu schützenden Website und nehmen Sie die folgenden Änderungen vor:

    Hinweis: Sie müssen diese Konfigurationsdatei gemäß Ihrer spezifischen Situation anpassen. Aufgrund von Nginx-Versionen und anderen Faktoren funktioniert diese Konfigurationsdatei möglicherweise nicht reibungslos auf allen Nginx-Instanzen. Bitte passen Sie den relevanten Inhalt basierend auf Ihren eigenen Nginx-Informationen an.

    server {
    listen 443 ssl http2;

    include /path/to/ssl.conf;

    # Add the following content
    location ^~ /oauth2/ {
    proxy_pass http://127.0.0.1:65534; # Change this to the "--http-address" configured in step II.6

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;

    proxy_set_header X-Auth-Request-Redirect $request_uri;
    # or, if you are handling multiple domains:
    # proxy_set_header X-Auth-Request-Redirect $scheme://$host$request_uri;
    }
    location = /oauth2/auth {
    proxy_pass http://127.0.0.1:65534; # Change this to the "--http-address" configured in step II.6

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Scheme $scheme;
    proxy_set_header Content-Length "";
    proxy_pass_request_body off;
    }
    location ^~ / {
    auth_request /oauth2/auth;
    error_page 401 = /oauth2/sign_in;

    auth_request_set $user $upstream_http_x_auth_request_user;
    auth_request_set $email $upstream_http_x_auth_request_email;
    proxy_set_header X-User $user; # Pass the username of the user logged in to your backend service
    proxy_set_header X-Email $email; # Pass the email of the user logged in to your backend service

    auth_request_set $token $upstream_http_x_auth_request_access_token;
    proxy_set_header X-Access-Token $token; # Pass the user's login token to your backend service

    # The following configurations are related to cookie validation for user login
    auth_request_set $auth_cookie $upstream_http_set_cookie;
    add_header Set-Cookie $auth_cookie;

    auth_request_set $auth_cookie_name_upstream_1 $upstream_cookie_auth_cookie_name_1;

    if ($auth_cookie ~* "(; .*)") {
    set $auth_cookie_name_0 $auth_cookie;
    set $auth_cookie_name_1 "auth_cookie_name_1=$auth_cookie_name_upstream_1$1";
    }

    if ($auth_cookie_name_upstream_1) {
    add_header Set-Cookie $auth_cookie_name_0;
    add_header Set-Cookie $auth_cookie_name_1;
    }
    proxy_no_cache $cookie_session;

    # Provide the web page to the user after successful validation

    proxy_pass http://127.0.0.1:8080; # The address where your backend service runs
    # Note: This is not the Casdoor deployment address or the Oauth2-Proxy running address, but the address where your backend service that needs login protection runs.

    # Then add configurations to pass user IP, Connection request headers, etc., to your backend service, for example:
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header Accept-Encoding gzip;
    }
    access_log /path/to/access_log.log;
    error_log /path/to/error_log.log;
    }
  2. Speichern Sie die Datei und laden Sie Ihr Nginx neu.

Testen

  • Als Nächstes können Sie Ihre Implementierung testen.
  • Unter normalen Umständen durchlaufen Ihre Benutzer den folgenden Prozess, wenn sie sich bei Ihrem Dienst anmelden:
  • Öffnen Sie die URL project.yourdomain.com in einem Browser -> Sehen Sie nur eine Seite, die eine Anmeldung erfordert, einschließlich einer Schaltfläche mit der Aufschrift "Anmelden mit OpenID Connect" -> Klicken Sie auf die Schaltfläche und werden Sie zu Ihrer Casdoor-Adresse weitergeleitet, wo Sie aufgefordert werden, sich anzumelden -> Benutzer geben ihren Benutzernamen und ihr Passwort ein, und Casdoor überprüft ihre Anmeldeinformationen -> Automatische Weiterleitung zurück zu Ihrer URL project.yourdomain.com -> Erfolgreicher Zugriff auf Ihren Dienst -> Benutzer werden aufgefordert, sich erneut anzumelden, wenn die von Ihnen festgelegte --cookie-expire Zeit abläuft.

Fehlerbehebung

  • Wenn Ihr Projekt nicht wie erwartet läuft, überprüfen Sie bitte Ihre Nginx-Konfiguration und Oauth2-Proxy-Konfigurationsparameter auf Richtigkeit.
  • Sie können sich auch auf die offizielle Dokumentation von Oauth2-Proxy auf GitHub beziehen.
  • Wenn Sie Fehler in diesem Dokument finden, können Sie gerne Bearbeitungen auf GitHub anfordern.