У меня есть сервер 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?