AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2013, 16:11   #1  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Lightbulb Проверка пароля доменного пользователя
Здравствуйте!

Есть задача, для которой пока не нашел решения, нужна ваша помощь в ее решении. Ниже последовательное описание данной задачи:
1.Из веб-сервиса происходит вызов статического метода Ax2009 через Buiseness Connector. Цель метода - авторизация.
2. В аксаптовский метод передаются логин и пароль доменного пользователя через параметры.
3. Необходимо проверить правильность указанного пароля в Аксапта.

Решения, которые я уже пробовал, но пока не получил успешный результат:
1. Класс xAxaptaUserManager. Метод этого класса ValidatePassword под сессией веб-вользователя (пользователя, который вызывает метод Ax через Buiseness Connector) результата не дал. Но данный метод, запущенный под клиентской сессией работает хорошо.
2. Функцию LogonUser библиотеки advapi32 также не удалось применить:
LogonUser(UserName,Domain, UserPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,&hTokenUser).
Здесь я не совсем разобрался, что передавать в качаестве последнего параметра при вызове из Axapta.

Каким образом, на ваш взгляд, можно проверить пользователя домена в Аксапте по его имени, домену и паролю?
__________________
С уважением, Александр.
Старый 06.04.2013, 17:20   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вообще, гонять по сети логины с паролями в открытом виде - неудачная идея с т.з. безопасности. Если нужно аутентифицировать доменного пользователя, то непонятно, почему это должна делать Аксапта: если веб-сервис работает не в DMZ, то он может сделать это самостоятельно. На счет LogonUser с флагом LOGON32_LOGON_INTERACTIVE тоже идея спорная: если функция будет дергаться на АОСе, то с чего вдруг у любого доменного пользователя возьмется право интерактивно логиниться на соотв. хост?
В чем общая-то затея?
Старый 07.04.2013, 01:02   #3  
samolalex is offline
samolalex
Участник
Аватар для samolalex
Самостоятельные клиенты AX
 
259 / 107 (4) +++++
Регистрация: 18.06.2010
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вообще, гонять по сети логины с паролями в открытом виде - неудачная идея с т.з. безопасности. Если нужно аутентифицировать доменного пользователя, то непонятно, почему это должна делать Аксапта: если веб-сервис работает не в DMZ, то он может сделать это самостоятельно. На счет LogonUser с флагом LOGON32_LOGON_INTERACTIVE тоже идея спорная: если функция будет дергаться на АОСе, то с чего вдруг у любого доменного пользователя возьмется право интерактивно логиниться на соотв. хост?
В чем общая-то затея?
Да, не обозначил важный момент, веб-сервис как раз таки работает в DMZ. Общая суть задачи - через веб-интерфейс осуществлять вывод данных из Axapta, а также вызов необходимых методов Ax для обработки этих данных. Вся логика выборки и обработки данных реализована в Axapta.
__________________
С уважением, Александр.
Старый 08.04.2013, 08:23   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от samolalex Посмотреть сообщение
1.Из веб-сервиса происходит вызов статического метода Ax2009 через Buiseness Connector. Цель метода - авторизация.
2. В аксаптовский метод передаются логин и пароль доменного пользователя через параметры.
3. Необходимо проверить правильность указанного пароля в Аксапта.
А почему бы не использовать метод коннектора LogonAs? Если не для постоянного подключения, то хотябы на время авторизации?

Или этот доменный пользователь может не являться пользователем аксапты?
Старый 08.04.2013, 11:17   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
У меня вот так работает. Только ссылку на System.DirectoryServices.AccountManagement вручную в AOT\References пришлось добавить.
X++:
static void JobCheckUserPassword(Args _args)
{
    System.DirectoryServices.AccountManagement.PrincipalContext 
        pc = new System.DirectoryServices.AccountManagement.PrincipalContext(
                    System.DirectoryServices.AccountManagement.ContextType::Domain);
    boolean bt = false;
    ;

    try
    {
        bt = pc.ValidateCredentials(
            "user_name", 
            "password", 
            System.DirectoryServices.AccountManagement.ContextOptions::Negotiate);
    }
    catch
    {
        error("error");
    }

    pc.Dispose();

    info(strfmt("%1", bt));
}
За это сообщение автора поблагодарили: gl00mie (2), samolalex (3).
Теги
active directory, enterprise portal, web сервис, аутентификация, законченный пример

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проверка существования email-адреса в Active Directory через ADSI gl00mie DAX: Программирование 0 13.01.2012 15:19
Проверка ВР не заглядывает внутрь расширенных типов-массивов glibs DAX: Программирование 0 26.01.2010 20:16
Проверка целостности coja DAX: Администрирование 6 06.09.2006 13:14
Проверка цикличности в спецификации vey DAX: Функционал 2 24.03.2005 11:03
Форма ввода логина и пароля kvan DAX: Программирование 0 25.09.2002 15:58

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:51.