check_password_complexity()

Prüft, ob ein Passwort die auf dem Server konfigurierte Passwortregel erfüllt. Der Server gleicht das Passwort gegen den regulären Ausdruck in Login\PwdComplexity ab und liefert das Ergebnis als bool zurück.

Typischer Einsatz: ein Passwort vor create_user(), update_user() oder einer Self-Service-Änderung prüfen, damit der Benutzer das Urteil des Servers erhält statt einer abgelehnten Schreiboperation.

Trotz des Jobnamens krn.VerifyPassword ist das keine Anmeldedatenprüfung: Das Passwort wird nie mit dem gespeicherten Passwort eines Kontos verglichen.

Ist eine Regel gesetzt, liefert auch das korrekte Passwort des angemeldeten Benutzers false, sobald es der Regel nicht entspricht. Die Methode ist damit ungeeignet, um die Identität eines Benutzers zu bestätigen (Step-up-Authentifizierung) - dafür check_user_account() verwenden.

1. Signatur

  • Sync

  • Async

ecm.security.check_password_complexity(password: str) -> bool
await ecm.security.check_password_complexity(password: str) -> bool

2. Parameter

Parameter Standard Beschreibung

password

erforderlich

Das zu prüfende Passwort im Klartext (oder ein mit ECMIND_KEY verschlüsselter Wert, der automatisch über password_reveal() entschlüsselt wird). Es wird vor dem Senden mit dem Verfahren kodiert, das der Server verlangt (Einstellung Security\PwdDecryption) - genau wie bei create_user(). Ein bereits serverseitig kodierter Wert wird unverändert durchgereicht.

3. Rückgabewert

True, wenn das Passwort die konfigurierte Regel erfüllt, sonst False.

4. Fehler

Exception Ursache

ValueError

password ist leer (der Server weist leere Werte mit einem Fehler zurück, die Methode fängt das vor dem Roundtrip ab) oder das Passwort lässt sich im Verfahren des Servers nicht darstellen (z.B. mehr als 62 Zeichen auf einem Server mit PwdDecryption=1).

ECMException

Unterklasse, die raise_for_blue_exception bei einem Serverfehler auslöst.

5. Beispiele

5.1. Passwort vor der Benutzeranlage prüfen

  • Sync

  • Async

password = "S3cret!"

if not ecm.security.check_password_complexity(password):
    raise ValueError("Passwort erfüllt die Passwortregel des Servers nicht")

user = ecm.security.create_user("john", password=password, display_name="John Doe")
password = "S3cret!"

if not await ecm.security.check_password_complexity(password):
    raise ValueError("Passwort erfüllt die Passwortregel des Servers nicht")

user = await ecm.security.create_user("john", password=password, display_name="John Doe")

5.2. Regelbeschreibung für die Fehlermeldung lesen

Login\PwdComplexityDescription enthält den Text, den der Administrator zur Regel hinterlegt hat - also das, was der Benutzer bei einem False zu sehen bekommen sollte:

from ecmind_blue_client import Jobs

if not ecm.security.check_password_complexity(password):
    hint = ecm.execute(Jobs.KRN_REGETREGVALUE, Flags=0, Name="Login\\PwdComplexityDescription")
    print(hint.get("Value", str, "Passwort entspricht nicht den Vorgaben"))

6. Serverseitige Einstellungen

Die Regel wird im enaio® enterprise-manager unter den Servereigenschaften im Bereich Anmeldung gepflegt und liegt in der Server-Registry:

enterprise-manager Registry-Eintrag Bedeutung

Regulärer Ausdruck für die Passwortsyntax

Login\PwdComplexity

"Sie können einen Regulären Ausdruck zur Vorgabe einer Syntax bei der Vergabe und dem Ändern eines Passworts angeben. Entspricht ein Passwort dieser Vorgabe nicht, wird es nicht akzeptiert." Standard: leer.

Beschreibungstext zur Passwortsyntax

Login\PwdComplexityDescription

"Beschreibungstext zur Syntax-Vorgabe, der in den Dialogen bei der Vergabe und dem Ändern eines Passworts angezeigt wird." Standard: leer.

check_password_complexity() fragt also genau die Regel ab, die der Server beim Setzen eines Passworts selbst durchsetzt - und Login\PwdComplexityDescription ist der Text, den enaio in seinen eigenen Passwortdialogen dazu anzeigt.

Die Parameter sind in der enaio®-Administratordokumentation unter den Servereigenschaften beschrieben.

7. Hinweise

  • Ist Login\PwdComplexity leer - der Auslieferungszustand -, hat der Server keine Regel anzuwenden und jedes nicht-leere Passwort liefert True.

  • Das Passwort niemals selbst im Klartext an krn.VerifyPassword übergeben: Der Server dekodiert den Wert immer, ein Klartext wird dabei zu Buchstabensalat und liefert ein falsches Ergebnis ohne jede Fehlermeldung. Die Methode kodiert deshalb grundsätzlich selbst.

  • enaio lässt maximal 100 Zeichen pro Passwort zu; die clientseitige Kodierung begrenzt zusätzlich auf 128 Byte (AES-Verfahren) bzw. 62 ASCII-Zeichen (Altverfahren PwdDecryption=1).

  • Der Job kennt keinen Benutzerparameter. Er wird immer im Kontext der aktuellen Session ausgeführt, wirkt aber nur auf die serverweite Regel - das Ergebnis ist für alle Benutzer gleich.

8. Siehe auch