0

我尝试使用 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);

感谢您的帮助

4

0 回答 0