Wir versuchen, einen einfachen Authentifizierungsmechanismus mit NGINX als Proxy-Server und auth_request zu implementieren, um einige statische Dateien zu schützen.Wie kann ich die Session-Cookie-Einstellung behandeln, um sie dann mit NGINX auth_request zu verwenden?
- Die statischen Dokumente sind in docs.mydomain.com
- Die API, um eine Session-Token mit einer E-Mail/Passwort zu erzeugen, ist in login.otherdomain.com (Es wird eine JSON mit der Rückkehr E-Mail und Session-Token)
Der aktuelle Prozess sieht wie folgt zu authentifizieren:
Wenn Benutzer versuchen, auf docs.mydomain.com zuzugreifen, wird ihnen ein Anmeldeformular angezeigt. Dort geben sie ihre Anmeldeinformationen ein, die E-Mail/passwd wird dann über AJAX gesendet und die API wird uns ein Sitzungstoken geben, und wir speichern es in einem Cookie, etwas Ähnliches (bemerkte auch, dass ich in login.otherdomain.com habe aktivierte Authentifizierung).
$("form").submit(function(event) { $.ajax({ async: false, url: "http://login.otherdomain.com/api/user_sessions", method: "POST", data: { user_sessions: { email: $("#email").val(), password: $("#password").val(), } }, success: function(resp_hash) { $("form").reset() // Clearing form so email/pwd is not sent in POST request document.cookie = "x_api_session_id="+resp_hash.user_sessions.id; } }); });
Dann wird das Formular tatsächlich (mit GET) gesendet werden, und Sie können die gelöschten Felder in der Anfrage (E-Mail & Passwort) sehen, die ein bisschen hässlich aussieht. Die Anforderung wird an docs.mydomain.com/docs gesendet, die das Sitzungstoken anhand von login.otherdomain.com überprüft und überprüft, ob es noch gültig ist, und zwar unter Verwendung von nginx auth_request (https://developers.shopware.com/blog/2015/03/02/sso-with-nginx-authrequest-module/). Etwas wie folgt aus:
location /docs { auth_request /auth; } location = /auth { internal; proxy_pass $auth_api; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Api-Session-Id $cookie_x_api_session_id; }
Und dann werden die Dokumente angezeigt. Wir müssen noch eine saubere Handhabung der Fehlermeldungen implementieren, aber das funktioniert zunächst. Dennoch fühlt es sich hässlich an (besonders die AJAX-Anfrage, um den Session-Token zu bekommen) und ich denke, dass es einen besseren Weg geben sollte, dies zu tun. Irgendwelche Ideen, wie könnte das verbessert werden? Gibt es sicherheitsrelevante Auswirkungen auf die Art und Weise, wie wir dies umsetzen wollen?