Создайте нового пользователя в LDAP, а не там, где его обычно создает Drupal


У нас уже есть LDAP пользователей, которых мы хотим использовать для нашего нового сайта. Удивительно, но логин, похоже, находит только тех пользователей, которых мы хотим, а не тех, кого мы не хотим. Мы должны выяснить, почему, потому что мы, вероятно, захотим изменить это в будущем. (Я упоминаю, на случай, если это связано с моей главной проблемой.)

Однако более важная проблема заключается в том, что, когда мы создаем нового пользователя, мы хотим, чтобы он был создан в LDAP, а не там, где создает Drupal оно. Как я понимаю, когда он аутентифицируется по LDAP, он просто копирует пользователя в свою собственную базу данных и использует ее с этого момента, что также не то, что мы хотим, в случае, если пользователь изменит свои данные. Тем не менее, мы все равно хотели бы, чтобы пользователь-администратор работал, даже если LDAP умрет или что-то в этом роде. Документация не очень помогает в этом.

Итак, как мне заставить Drupal (я использую 7, но я не знаю, подходит ли он для 7) использовать LDAP для создания новых пользователей и для существующих пользователей LDAP? (Надеюсь, без полного удаления возможности использовать пользователей, уже находящихся в базе данных Drupal.)

Author: AlbeyAmakiir, 2012-02-07

2 answers

Вы никогда не сможете использовать основной пользовательский модуль Drupal без использования таблицы базы данных user (и многих других), без серьезного изменения основного Drupal.

Похоже, что единственная причина, по которой вы хотите, чтобы Drupal не использовал собственное управление пользователями + ролями + разрешениями (и всеми другими модулями Drupal, которые зависят от пользовательского модуля), заключается в том, что если пользователь обновляет некоторые данные в LDAP, они также обновляются в Drupal. Если это так, найдите способ синхронизации ваша информация о пользователе LDAP с информацией о пользователе Drupal.

Вы можете использовать функции hook_user_ в Drupal для выполнения любых действий, которые вы хотите выполнить, когда учетная запись пользователя создается, обновляется и т. Д. В Drupal. Например, если в форме регистрации пользователя Drupal будет создана новая учетная запись пользователя, вы будете выполнять любую логику, которая вам нужна (с помощью PHP или, возможно, чего-то еще), чтобы вставить новую запись на свой сервер LDAP.

 4
Author: Charlie Schliesser, 2012-02-07 23:06:21

Чтобы настроить LDAP с помощью Drupal 7, вам необходимо установить и настроить модуль LDAP (включая ldap_authentication и ldap_user). После включения вы найдете конфигурацию в /admin/config/people/ldap.

Прежде всего, вам нужно будет добавить и настроить "Конфигурацию сервера LDAP" в зависимости от вашей конфигурации LDAP (вкладка Серверы в /admin/config/люди/ldap/серверы).

Чтобы настроить аутентификацию LDAP в Drupal, выберите Конфигурацию сервера LDAP на вкладке Аутентификация в /администратор/конфигурация/люди/ldap/аутентификация.

В конце, чтобы создать записи LDAP при создании пользователя Drupal, включите опцию "Создать или синхронизировать запись LDAP при создании или обновлении учетной записи Drupal". и другую, которую вы считаете необходимой, и настройте выделение из Drupal сопоставлений LDAP в соответствии с вашей конфигурацией LDAP (вкладка "Пользователь" в /admin/config/люди/ldap/пользователь).

См. конфигурацию ниже:

LDAP Entry Provisioning Events

Example of Provisioning from Drupal to LDAP Mappings

Вот пример конфигурации, экспортированной в код с использованием функций :

<?php
/**
 * Implements hook_default_ldap_servers().
 */
function foo_ldap_default_ldap_servers() {
  $export = array();
$ldap_servers_conf = new stdClass();
$ldap_servers_conf->disabled = FALSE; /* Edit this to true to make a default ldap_servers_conf disabled initially */
$ldap_servers_conf->api_version = 1;
$ldap_servers_conf->sid = 'ldap_pv';
$ldap_servers_conf->name = 'LDAP: Local Provisioning';
$ldap_servers_conf->status = TRUE;
$ldap_servers_conf->ldap_type = 'openldap';
$ldap_servers_conf->address = 'example.com';
$ldap_servers_conf->port = 389;
$ldap_servers_conf->tls = TRUE;
$ldap_servers_conf->followrefs = FALSE;
$ldap_servers_conf->bind_method = 1;
$ldap_servers_conf->binddn = 'cn=drupal-test,ou=Services,dc=example,dc=com';
$ldap_servers_conf->bindpw = '';
$ldap_servers_conf->basedn = array(
  0 => 'ou=People,dc=example,dc=com',
  1 => 'ou=External,ou=Access,ou=Group,dc=example,dc=com',
);
$ldap_servers_conf->user_attr = 'uid';
$ldap_servers_conf->account_name_attr = '';
$ldap_servers_conf->password_attr = 'userPassword';
$ldap_servers_conf->password_attr_encoding = 'clear';
$ldap_servers_conf->mail_attr = 'mail';
$ldap_servers_conf->mail_template = '';
$ldap_servers_conf->picture_attr = '';
$ldap_servers_conf->unique_persistent_attr = '';
$ldap_servers_conf->unique_persistent_attr_binary = FALSE;
$ldap_servers_conf->user_dn_expression = '';
$ldap_servers_conf->ldap_to_drupal_user = '';
$ldap_servers_conf->testing_drupal_username = 'admin';
$ldap_servers_conf->testing_drupal_user_dn = '';
$ldap_servers_conf->grp_unused = FALSE;
$ldap_servers_conf->grp_object_cat = 'groupofnames';
$ldap_servers_conf->grp_nested = FALSE;
$ldap_servers_conf->grp_user_memb_attr_exists = FALSE;
$ldap_servers_conf->grp_user_memb_attr = '';
$ldap_servers_conf->grp_memb_attr = 'member';
$ldap_servers_conf->grp_memb_attr_match_user_attr = 'dn';
$ldap_servers_conf->grp_derive_from_dn = FALSE;
$ldap_servers_conf->grp_derive_from_dn_attr = '';
$ldap_servers_conf->grp_test_grp_dn = 'ou=External,ou=Access,ou=Group,dc=example,dc=com';
$ldap_servers_conf->grp_test_grp_dn_writeable = '';
$ldap_servers_conf->search_pagination = FALSE;
$ldap_servers_conf->search_page_size = 1000;
$ldap_servers_conf->weight = 0;
$export['ldap_pv'] = $ldap_servers_conf;
  return $export;
}

/**
 * Implements hook_default_ldap_authorization().
 */
function foo_ldap_default_ldap_authorization() {
  $export = array();
  $consumer_type = new stdClass();
  $consumer_type->disabled = FALSE; /* Edit this to true to make a default consumer_type disabled initially */
  $consumer_type->api_version = 1;
  $consumer_type->sid = 'ldap_pv';
  $consumer_type->consumer_type = 'drupal_role';
  $consumer_type->consumer_module = 'ldap_authorization_drupal_role';
  $consumer_type->status = TRUE;
  $consumer_type->only_ldap_authenticated = TRUE;
  $consumer_type->use_first_attr_as_groupid = FALSE;
  $consumer_type->mappings = 'a:1:{i:0;a:6:{s:12:"user_entered";s:18:"OV4 Pro Repository";s:4:"from";s:70:"cn=example-group-pro,ou=External,ou=Access,ou=Group,dc=example,dc=com";s:10:"normalized";s:18:"OV4 Pro Repository";s:10:"simplified";s:18:"OV4 Pro Repository";s:5:"valid";b:0;s:13:"error_message";s:106:"Role <em class="placeholder">OV4 Pro Repository</em>_name does not exist and role creation is not enabled.";}}';
  $consumer_type->use_filter = TRUE;
  $consumer_type->synch_to_ldap = FALSE;
  $consumer_type->synch_on_logon = TRUE;
  $consumer_type->revoke_ldap_provisioned = TRUE;
  $consumer_type->create_consumers = TRUE;
  $consumer_type->regrant_ldap_provisioned = TRUE;
  $export['drupal_role'] = $consumer_type;
  return $export;
}
?>

Подробнее:

 2
Author: kenorb, 2014-03-10 17:03:17