Migrieren von Benutzern von Keycloak bis LDAP mit intakten PasswörternPhp

PHP-Programmierer chatten hier
Anonymous
 Migrieren von Benutzern von Keycloak bis LDAP mit intakten Passwörtern

Post by Anonymous »

Wir haben derzeit einen Schlüsselkloak-Bereich, in dem wir alle vorhandenen Benutzer in LDAP exportieren möchten (mit intakten Kennwörtern), sodass wir die Anmeldeunterstützung für andere Standorte hinzufügen können, die OpenID Connect oder SAML nicht unterstützen. Algorithmus, ich musste OpenLDAP 2.4.47 mit den Beitragsmodulen verwenden, um dies auch auf der LDAP -Seite zu unterstützen (ich glaube auch, dass ich dieses Modul in der Konfiguration aktiviert habe). https://github.com/hamano/openldap-pbkdf2

Verzeihen Sie mir für die Verwendung von PHP, aber es ist die Programmiersprache. Base64_Codode im PHP -Handbuch, um eine "angepasste Basis64" -Anzone zu erstellen und die erstellte Zeichenfolge beim Erstellen eines LDAP -Benutzers als Benutzerpasswort -Feld anzugeben. Der Benutzer wird erfolgreich in LDAP erstellt, aber ich kann mich nicht gegen LDAP authentifizieren, indem ich die Anmeldeinformationen für den Benutzer, den ich gerade erstellt habe/*
This example migrates a single user, to be adapted to a loop later, if it works.

NOTE: KC_* constants are defined in an external config.php file, such as:
KC_LDAP_BASEDN = "ou=users,dc=sso,dc=example,dc=com"
KC_REALM_ID = "KeycloakUserRealm"
(not actual code from config.php, but you get the point)
*/

$ldc = ldap_connect(KC_LDAP_SERVER);
ldap_set_option($ldc, LDAP_OPT_PROTOCOL_VERSION, KC_LDAP_PROTOCOL); // should be 3 in config.php
$ldb = ldap_bind($ldc, KC_LDAP_BINDDN, KC_LDAP_BINDPW);

$usertest = 'username_of_user_to_be_migrated';

// fetch user info
$u_sel = $db->query("SELECT * FROM `USER_ENTITY` WHERE `USERNAME`='".$db->real_escape_string($usertest)."' AND `REALM_ID`='".$db->real_escape_string(KC
_REALM_ID)."'");

$uinfo = $u_sel->fetch_assoc();

// fetch credential of user, type="password"
$c_sel = $db->query("SELECT * FROM `CREDENTIAL` WHERE `USER_ID`='".$db->real_escape_string($uinfo['ID'])."' AND `TYPE`='password'");

$cred = $c_sel->fetch_assoc();

$uprop = array();
$uprop['objectClass'] = array('top', 'person', 'organizationalPerson', 'inetOrgPerson');
$uprop['uid'] = $uinfo['USERNAME'];
$uprop['mail'] = $uinfo['EMAIL'];
$uprop['cn'] = $uinfo['FIRST_NAME'];
$uprop['sn'] = $uinfo['LAST_NAME'];

// also base64_decode() VALUE, since this seems to be already enocoded in base64, before re-encoding it with base64url_encode()
$uprop['userPassword'] = '{'.strtoupper($cred['ALGORITHM']).'}'.$cred['HASH_ITERATIONS'].'$'.base64url_encode($cred['SALT']).'$'.base64url_encode(base6
4_decode($cred['VALUE']));

ldap_add($ldc, 'uid='.$uprop['uid'].','.KC_LDAP_BASEDN, $uprop);
< /code>

Sobald dies erledigt ist, führe ich ein zweites Skript aus, um eine Verbindung zu diesem Benutzer herzustellen: < /p>

$ldc = ldap_connect(KC_LDAP_SERVER);
ldap_set_option($ldc, LDAP_OPT_PROTOCOL_VERSION, KC_LDAP_PROTOCOL); // should be 3 in config.php

$userdn = 'uid=username_of_user_to_be_migrated,'.KC_LDAP_BASEDN;
$userpw = 'asdASD123';

$ldb = ldap_bind($ldc, $userdn, $userpw);
< /code>

Wenn das zweite Skript oben ausgeführt wird, erhalte ich nur: < /p>

PHP Warning: ldap_bind(): Unable to bind to server: Invalid credentials in /home/user/projectdir/test_ldap_user.php on line 22
< /code>

Beispieleintrag in der Anmeldeinformationsdatenbank sieht ungefähr so ​​aus: < /p>

ID: 5718a65c-1927-4ac7-87ce-aec0c7dda296
DEVICE: NULL
HASH_ITERATIONS: 27500
SALT: � �??�Pz�e��X,
TYPE: password
VALUE: DdCJAJvuhidAC2by7TZY8I0E8HF4V6FXrPa4nSXduvSzbb+xHW3D4QiiiPpvuzL2bdk6k0kNQKS/477k5kiLzA==
USER_ID: b06ce13f-4e8e-474e-b5ee-5d664d6f9575
CREATED_DATE: 1561051801144
COUNTER: 0
DIGITS: 0
PERIOD: 0
ALGORITHM: pbkdf2-sha256
< /code>

Die Ausgabe des Benutzerpasswords ist normalerweise so etwas wie folgt: < /p>

{PBKDF2-SHA256}27500$FrcRlj8SGJJQet1l9LNYLA$DdCJAJvuhidAC2by7TZY8I0E8HF4V6FXrPa4nSXduvSzbb-xHW3D4QiiiPpvuzL2bdk6k0kNQKS_477k5kiLzA
< /code>

Fehlt mir möglicherweise etwas in diesem Code, um sicherzustellen, dass der Kennwort-Hash ordnungsgemäß migriert ist?>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post