我有一台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请求?
答案 0 :(得分:0)
如果它是您要触发的动态NAV Web服务(没有从代码但是从标记中看到),您必须激活NST上的ntlm。 只需更改属性' ServicesUseNTLMAuthentication'从CustomSettings.config中的False到True或只使用Microsoft Dynamics NAV管理MMC。不要忘记在更换后重启服务。