0

У меня есть сервер Windows (Navision), предлагающий веб-доступ к его API через проверку подлинности Active Directory.
Я пытаюсь сделать запрос на веб-сервер с помощью проверки подлинности Active Directory с помощью внешнего хоста на базе Linux.Запрос python urllib2, использующий аутентификацию Active Directory

Я успешно прошел аутентификацию с использованием python-ldap библиотеки.

import ldap 
import urllib2 

DOMAINHOST='domain_ip_host' 

USERNAME='[email protected]' 
PASSWORD='mycleanpassword' 

URL='http://...' 

conn = ldap.open(DOMAINHOST) 
ldap.set_option(ldap.OPT_REFERRALS, 0) 

try: 
    print conn.simple_bind_s(USERNAME, PASSWORD) 
except ldap.INVALID_CREDENTIALS: 
    user_error_msg('wrong password provided') 

Выходной сигнал в этом случае:

(97, [], 1, []) 

, представляющий собой успешную аутентификацию.

Мне нужно будет использовать эту успешную аутентификацию для связи с веб-службой Navision, например. используя библиотеку urllib2.

req = urllib2.Request(URL) 
res = urllib2.urlopen(req) 

Конечно, так как аутентификация не эксплуатировали/принят, то запрос завершается с ошибкой 401 Unauthorized.

Я также попытался использовать python-ntlm библиотеку:

passman = urllib2.HTTPPasswordMgrWithDefaultRealm() 
passman.add_password(None, URL, USERNAME, PASSWORD) 
# create the NTLM authentication handler 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman) 

# other authentication handlers 
auth_basic = urllib2.HTTPBasicAuthHandler(passman) 
auth_digest = urllib2.HTTPDigestAuthHandler(passman) 

# disable proxies (if you want to stay within the corporate network) 
proxy_handler = urllib2.ProxyHandler({}) 

# create and install the opener 
opener = urllib2.build_opener(proxy_handler, auth_NTLM, auth_digest, auth_basic) 
urllib2.install_opener(opener) 

# retrieve the result  
response = urllib2.urlopen(url) 
print(response.read()) 

Кроме того, в этом случае обеспечивается ошибка 401 Unauthorized.

Как я могу успешно сделать веб-запрос, аутентифицировав пользователя в Active Directory?

ответ

0

Если это веб-сервис Dynamics NAV, который вы хотите вызвать (не видел этого кода, но из тега), вам нужно активировать ntlm на вашем NST. Просто измените свойство «ServicesUseNTLMAuthentication» с False на True в вашем CustomSettings.config или просто используйте MMC Microsoft Dynamics NAV Administration. Не забудьте перезапустить службу после изменения.

Смежные вопросы