/ / Verwendung eines externen Auth-Systems in Pyramid - Python, Authentifizierung, Pyramide

Wie man das externe Authentifizierungssystem in Pyramid verwendet - Python, Authentifizierung, Pyramide

Kontext

Meine App basiert auf einem externen Dienst zur Authentifizierung, die Python-API hat Funktion authentiate_request Hexe braucht request Instanz als Parameter und gibt das Ergebnis dict zurück:

  • Wenn auth erfolgreich war, enthält dict 3 Schlüssel:

    • erfolgreich: wahr
    • Benutzername: Alice
    • Cookies: [Liste der Set-Cookie-Header, die erforderlich sind, um sich an den Benutzer zu erinnern]
  • wenn nicht erfolgreich:

    • erfolgreich: falsch
    • Weiterleitung: URL, an den der Benutzer für die webbasierte Authentifizierung umgeleitet werden soll

Der Aufruf dieser Funktion ist nun relativ teuer (darunter liegt HTTP POST).

Frage

Ich bin neu im Pyramid-Sicherheitsmodell, und ich habe Schwierigkeiten, vorhandenes / korrektes Schreiben zu verwenden AuthenticationPolicy für meine app, also verwendet sie meinen auth-service und ruft die API nicht mehr als einmal pro Sitzung auf (im auth-Erfolgsszenario)?

Antworten:

0 für die Antwort № 1

Es gibt zwei Möglichkeiten, benutzerdefinierte zu integrierenAuth mit Pyramid: - Schreibe deine eigenen Authentifizierungsrichtlinien für Pyramid (Ich habe das nicht gemacht) - Schreiben Sie Ihre eigene Middleware, um Ihre Auth-Probleme zu lösen, und verwenden Sie die RemoteUserAuthenticationPolicy in Pyramid (ich habe dies getan)

Für die zweite schreiben Sie ein paar Standard-WsgiMiddleware, sortieren Sie Ihr Custom Authentication-Geschäft dort aus und schreiben Sie dann an die Wsgi-Umgebung. Die Pyramidenautorisierung funktioniert dann einwandfrei. Das Pyramid-Authentifizierungssystem erhält den Benutzerwert aus der Einstellung "REMOTE_USER" von wsgi env.

Ich persönlich mag diesen Ansatz, weil er einfach istum verschiedene Apps in Ihre Middleware zu packen und ganz einfach auszuschalten oder auszutauschen. Obwohl dies nicht wirklich die Antwort auf genau das ist, was Sie gefragt haben, könnte dies eine bessere Vorgehensweise sein als das, was Sie versuchen.