IAM-14: passwort-richtlinien
internal/pwpolicy: Validate ist eine schmale Regelschicht VOR dem bcrypt-Hashing aus IAM-02, kein eigenes Policy-Framework. Prueft Mindestlaenge, Zeichenklassen (Gross-/Kleinbuchstaben, Ziffern, Sonderzeichen je nach Policy) und eine eingebettete Sperrliste haeufig verwendeter Passwoerter (case-insensitive) — Akzeptanzkriterium 1 + 2. Store haelt die Richtlinie als eine Zeile je Tenant-Datenbank (Singleton, Modell C), DefaultPolicy() greift, solange kein Tenant eine eigene gesetzt hat. LoginAndCheckPolicy komponiert IAM-02s LoginService, OHNE ihn zu veraendern: der Login selbst schlaegt bei einem alten, nicht mehr konformen Passwort NICHT fehl (Akzeptanzkriterium 3 — kein rueckwirkendes Aussperren), die Funktion liefert zusaetzlich mustChangePassword=true. Die Pruefung ist nur im Login-Moment moeglich, da dort kurzzeitig das Klartext-Passwort vorliegt — der gespeicherte bcrypt-Hash laesst sich nicht rueckwirkend gegen eine neue Richtlinie pruefen. Pruefungen (ausgefuehrt auf root@192.168.1.131, go build/vet/test PASS): 1. Zu kurzes/zu einfaches Passwort bei Registrierung/Aenderung abgelehnt — TestValidate_RejectsTooShortOrSimple. PASS. 2. Passwort aus Sperrliste abgelehnt — TestValidate_RejectsBlocklistedPassword (inkl. Gross-/Kleinschreibung). PASS. 3. Bestehender Nutzer mit altem, nicht-konformem Passwort kann sich noch einloggen, wird aber zur Aenderung aufgefordert — TestLoginAndCheckPolicy_FlagsNonConformantExistingPassword: Login mit schwachem Altpasswort gelingt, mustChangePassword=true; mit konformem Passwort mustChangePassword=false. PASS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
3d20d86a4f
commit
3c4e9d45b8
@@ -0,0 +1,30 @@
|
||||
package pwpolicy
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitea.perlbach24.de/scripte/nexarch/internal/auth"
|
||||
)
|
||||
|
||||
// LoginAndCheckPolicy komponiert IAM-02s LoginService mit der Passwort-
|
||||
// Richtlinienpruefung, OHNE LoginService selbst zu veraendern. Ein
|
||||
// bestehender Benutzer mit einem alten, nicht mehr konformen Passwort kann
|
||||
// sich weiterhin einloggen (Login schlaegt NICHT fehl) — er wird lediglich
|
||||
// zur Aenderung aufgefordert (Akzeptanzkriterium 3: kein rueckwirkendes
|
||||
// Aussperren). Die Pruefung ist nur HIER moeglich, da nur beim Login das
|
||||
// Klartext-Passwort kurzzeitig vorliegt — der gespeicherte bcrypt-Hash laesst
|
||||
// sich nicht rueckwirkend gegen eine neue Richtlinie pruefen.
|
||||
func LoginAndCheckPolicy(ctx context.Context, policies *Store, login *auth.LoginService, email, password string) (token string, mustChangePassword bool, err error) {
|
||||
token, err = login.Login(ctx, email, password)
|
||||
if err != nil {
|
||||
return "", false, err
|
||||
}
|
||||
|
||||
policy, err := policies.Get(ctx)
|
||||
if err != nil {
|
||||
return "", false, err
|
||||
}
|
||||
|
||||
mustChangePassword = Validate(policy, password) != nil
|
||||
return token, mustChangePassword, nil
|
||||
}
|
||||
Reference in New Issue
Block a user