Python urllib2请求利用Active Directory身份验证

时间:2016-09-19 13:26:48

标签: python active-directory windows-authentication ntlm navision

我有一台Windows服务器(Navision)通过Active Directory身份验证提供对其API的Web访问 我正在尝试通过Active Directory身份验证向Web服务器发出请求,使用基于Linux的外部主机。

我使用python-ldap库成功进行了身份验证。

import ldap
import urllib2

DOMAINHOST='domain_ip_host'

USERNAME='administrator@mydomain'
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验证用户来成功发出Web请求?

1 个答案:

答案 0 :(得分:0)

如果它是您要触发的动态NAV Web服务(没有从代码但是从标记中看到),您必须激活NST上的ntlm。 只需更改属性' ServicesUseNTLMAuthentication'从CustomSettings.config中的False到True或只使用Microsoft Dynamics NAV管理MMC。不要忘记在更换后重启服务。