|
06.04.2013, 16:11 | #1 |
Участник
|
Проверка пароля доменного пользователя
Здравствуйте!
Есть задача, для которой пока не нашел решения, нужна ваша помощь в ее решении. Ниже последовательное описание данной задачи: 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 |
Участник
|
Вообще, гонять по сети логины с паролями в открытом виде - неудачная идея с т.з. безопасности. Если нужно аутентифицировать доменного пользователя, то непонятно, почему это должна делать Аксапта: если веб-сервис работает не в DMZ, то он может сделать это самостоятельно. На счет LogonUser с флагом LOGON32_LOGON_INTERACTIVE тоже идея спорная: если функция будет дергаться на АОСе, то с чего вдруг у любого доменного пользователя возьмется право интерактивно логиниться на соотв. хост?
В чем общая-то затея? |
|
07.04.2013, 01:02 | #3 |
Участник
|
Цитата:
Сообщение от gl00mie
Вообще, гонять по сети логины с паролями в открытом виде - неудачная идея с т.з. безопасности. Если нужно аутентифицировать доменного пользователя, то непонятно, почему это должна делать Аксапта: если веб-сервис работает не в DMZ, то он может сделать это самостоятельно. На счет LogonUser с флагом LOGON32_LOGON_INTERACTIVE тоже идея спорная: если функция будет дергаться на АОСе, то с чего вдруг у любого доменного пользователя возьмется право интерактивно логиниться на соотв. хост?
В чем общая-то затея?
__________________
С уважением, Александр. |
|
08.04.2013, 08:23 | #4 |
Участник
|
Цитата:
Или этот доменный пользователь может не являться пользователем аксапты? |
|
08.04.2013, 11:17 | #5 |
Участник
|
У меня вот так работает. Только ссылку на 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 сервис, аутентификация, законченный пример |
|
|