Проверка связки логинпароль в домене windows

Сквозная авторизация используется в нашей жизни все чаще и чаще.
В данной работе приведен еще один пример.

В платформе 1С.Предприятие 8 имеется замечательная возможность аутентификации пользователей средствами Windows.
Поэтому многие организации, где используется Active Directory, используют и Windows — аутентификацию пользователей.
При этом отключая аутентификацию 1С:Предприятия.
Была поставлена задача: любой сотрудник компании должен иметь возможность выполнить некую операции в среде 1С:Предприятия с любого компьютера.
Понятно, что на других компьютерах работают другие сотрудники, у которых 1С запущена под их учетными записями.
Можно конечно запустить второй сеанс работы, но этот процесс занимает много времени.
Если используется 1С-аутентификация, то можно использовать COM-соединение.
А вот если используется Windows — аутентификация и выключена возможность 1С-аутентификации, то появляется проблема как проверить
тот ли сотрудник использует 1С?
Имя пользователя домена можно брать из настроек пользователя средствами 1С используя
свойства глобального контекста «ПользователиИнформационнойБазы».
А дальше попросить ввести пользователя его пароль и проверить его.

Для аутентификации пользователей можно использовать объект «LDAP» (Lightweight Directory Access Protocol) или «WinNT».
Про LDAP можно прочитать здесь http://citkit.ru/articles/1209/
Про WinNT можно прочитать здесь http://www.deltann.ru/10/d-062008/p-1
Ниже приведен пример функции использующий LDAP.

Функция ПроверитьПользователя(Домен, ИмяПользователя, Пароль)

dso = ПолучитьCOMОбъект(«LDAP:»);

Попытка
obj = dso.OpenDSObject(«LDAP://» + Домен, ИмяПользователя, Пароль, 1);

Возврат Истина;

Исключение
Описание = ОписаниеОшибки();

Если Найти(Описание, «имя пользователя или пароль не опознаны.») > 0 Тогда
Сообщить(«Неверный пароль»);

Иначе
Сообщить(Описание);

КонецЕсли;

Возврат Ложь;

КонецПопытки;

КонецФункции

К статье приложен пример обработки для проверки функции.

4 Comments

  1. oleg_km

    В данной ситуации LDAP не причем. Можно использовать любой COM-сервер который поддерживает авторизацию, например WMI:

    var locator = WSH.CreateObject(«WbemScripting.SWbemLocator»);

    var WMI = locator.ConnectServer(strHost, «root\CIMV2», strUser, strPass)

    Reply
  2. dagder

    Согласен. Можно любой.

    Reply
  3. Tanya_o

    Интересно, а как вы решали проблему, чтобы под доменным пользователем User1, вошел другой пользователь в 1С User2?

    Ведь при использовании доменной аутентификации необходимо пере заходить в систему, ну или терминал.

    Reply
  4. lekusia

    А где надо вызвать эту функцию — ПроверитьПользователя? В модуле управляемого приложения ничего не нашла 🙁

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *