我尝试使用 NTLM 身份验证访问 Microsoft NAV 网络服务。
我在 SoapUI 中测试了我的代码,我得到了一个带有预期响应的代码 200。
我可能低估了 NTLM 身份验证过程,只将其添加到请求属性中:'Authorization':'NTLM TlRMTVNTUAADAA...
使用错误的 NTLM 令牌,我收到错误 401。使用正确的令牌(由 SoapUI 提供),我收到错误 400。
如何在 groovy 脚本或 Java 中实现 NTLM 握手过程?
import groovy.text.SimpleTemplateEngine as TEMPLATE
import groovy.xml.Namespace
def file = new File('C:/myXMLfile.xml')
def template = new TEMPLATE().createTemplate(file)
def params = [param1:'x', param2:'y', error:false,valid:false]
def request = template.make(params).toString().getBytes('UTF-8')
def url = "http://urlduwerservice"
def conn = new URL(url).openConnection()
def reqProps = [
'Accept': 'text/xml;charset=UTF-8',
'Accept-Encoding': 'gzip,deflate',
'Content-Type': 'text/xml;charset=UTF-8',
'SOAPAction': '"Thisismysoapaction"',
'Content-Length': '2156',
'Host': 'thisismyhost',
'Connection': 'Keep-Alive',
'User-Agent': 'Apache-HttpClient/4.5.5 (Java/12.0.1)',
'Authorization':'NTLM thisismyNTLMtoken'
]
reqProps.each { key,value -> conn.addRequestProperty(key,value)}
conn.requestMethod = 'POST'
conn.doOutput = true
conn.outputStream << new ByteArrayInputStream(request)
g_log.warn(conn.responseCode);
感谢您的帮助