2017-02-06 1 views
1

Ich bin derzeit die Konfiguration meiner CAS Server v5.0.2 zu verwenden Datenbank-Authentifizierung, insbesondere mit der Methode Encode, mit der CAS-Eigenschaftendatei. Unten sind die relevanten Eigenschaftskonfigurationen aus der Eigenschaftendatei:CAS DB Authentifizierung "encode" Passwortverschlüsselung kann nicht mit Datenbank Passwort verschlüsselt mit Spring Security ShaPasswordEncoder

cas.authn.jdbc.encode[0].sql=SELECT * FROM public.vt_user WHERE email=? 
cas.authn.jdbc.encode[0].driverClass=org.postgresql.Driver 
cas.authn.jdbc.encode[0].url=jdbc:postgresql://localhost:5432/tracking 
cas.authn.jdbc.encode[0].user=postgres 
cas.authn.jdbc.encode[0].password=postgres 
cas.authn.jdbc.encode[0].saltFieldName=salt 
cas.authn.jdbc.encode[0].passwordFieldName=password 
cas.authn.jdbc.encode[0].healthQuery=SELECT 1 FROM INFORMATION_SCHEMA.TABLES 
cas.authn.jdbc.encode[0].numberOfIterations=1 
cas.authn.jdbc.encode[0].numberOfIterationsFieldName= 
cas.authn.jdbc.encode[0].staticSalt= 
cas.authn.jdbc.encode[0].algorithmName=SHA-1 
cas.authn.jdbc.encode[0].dialect=org.hibernate.dialect.PostgreSQLDialect 

cas.authn.jdbc.encode[0].passwordEncoder.type=DEFAULT 
cas.authn.jdbc.encode[0].passwordEncoder.characterEncoding=UTF-8 
cas.authn.jdbc.encode[0].passwordEncoder.encodingAlgorithm=SHA-1 

Die Datenbank, die ich verbinde, ist eine PostgreSQL DB. Die Kennwörter wurden zuvor mithilfe von 3.2.5 ShaPasswordEncoder von Spring Security mit der Standardstärke SHA-1 plus einem Salt-Wert codiert. Ich habe die Konfiguration der CAS-DB-Authentifizierung getestet, indem ich gültige Anmeldeinformationen auf der Standard-Anmeldeseite des CAS-Servers eingegeben habe. Die Authentifizierung schlägt jedoch immer fehl und gibt "Ungültige Anmeldeinformationen" zurück. Außerdem ist mir bereits bekannt, dass der ShaPasswordEncoder 3.2.5 veraltet ist, aber ich plane nicht, seine Implementierung zu ändern. Die Protokolle zeigen, dass der Benutzername erfolgreich aus der Benutzertabelle abgefragt werden kann, aber die Passwörter aus der Tabelle und der Eingabe stimmen nicht überein.

Jetzt suche ich nach einem Ansatz zur Lösung dieses Problems. Ich bin noch relativ neu für CAS, und ich schätze die dringend benötigte Hilfe sehr. Vielen Dank!

+0

Ich kann deine Frage nicht beantworten, aber ich kann dir sagen, dass das, was du zu erreichen versuchst, sowieso sinnlos ist wegen deiner Verwendung von SHA1 und der Tatsache, dass du überhaupt nicht über den Hash iterierst! Sie sollten wirklich bcrypt oder PBKDF2 verwenden, da sie viel langsamer und viel schwieriger zu finden sind Kollisionen. –

+0

Hey @ Luke Park. Momentan suche ich nicht nach der Passwortcodierungsimplementierung, die für die Datenbank verwendet wird, aber ich suche nach einer Möglichkeit, den Datenbankauthentifizierungshandler zu modifizieren oder anzupassen. Aber danke für deine Eingabe! –

Antwort

0

Ich löste dieses Problem, indem die QueryAndEncodeDatabaseAuthenticationHandler.java Datei aus der cas-Server-upport-jdbc Abhängigkeit Modifizieren (von der gleichen CAS-Version) Spring Security des ShaPasswordEncoder statt dem von CAS verwendet zu verwenden, die Hash-Standard-Apache-Shiros ist Bedienung. Ich habe speziell die modifizierte Java-Datei (plus AbstractJdbcUsernamePasswordAuthenticationHandler.java) in das CAS-Maven-Overlay eingefügt, das ich im Verzeichnis src/main/java/org/apereo/cas/adapter/jdbc verwende. Die relevante Funktion, die ich in der Java-Datei geändert habe, heißt DigestEncodedPassword. Ich habe die ursprünglichen Codezeilen auskommentiert und durch meine Implementierung des ShaPasswordEncoders ersetzt. Der benutzerdefinierte Quellcode sollte beim Erstellen von CAS kompiliert werden.

Verwandte Themen