嘿,我正在努力在React本机应用程序中实现NTLM身份验证。我正在使用该库https://github.com/SamDecrock/node-http-ntlm,但是为了使其正常工作,我首先必须从https://github.com/parshap/node-libs-react-native和https://github.com/itinance/react-native-fs中为fs添加大量节点核心模块,甚至在httpntlm库本身中添加js-md4以获得md4。哈希以使密码起作用。
长话短说,我认为即使在第一个请求之后连接仍然关闭,因为我的身份验证由于凭据无效而失败。
我在node.js本地服务器中使用https测试了相同的代码和库,并且可以正常工作,因此不是凭据本身无效。
关于如何在react-native中实现此身份验证的任何提示?
这是sendMessage1()的响应:
{
"type": "default",
"status": 401,
"ok": false,
"headers": {
"map": {
**"connection": "close",**
"server": "Microsoft-HTTPAPI/2.0",
"www-authenticate": "NTLM veryLongHash",
"date": "Wed, 17 Jul 2019 14:15:34 GMT",
"content-type": "text/html; charset=us-ascii",
"content-length": "341"
}
},
"url": "https://myAppUrl",
}
这是代码:
const keepAliveAgent = new https.Agent({
keepAlive: true
});
const options = {
url,
username: 'Username',
password: 'Password',
workstation: '',
domain: ''
};
const type1msg = ntlm.createType1Message(options);
const sendType1Message = async () => {
await fetch(url, {
headers: {
Accept: '*/*',
Connection: 'keep-alive',
Authorization: type1msg
},
keepAlive: true,
allowRedirects: false,
agent: keepaliveAgent
})
.then(res => setImmediate(() => sendType3Message(res)))
.catch(error => console.log('Error in send message1', error));
};
const sendType3Message = async res => {
console.log('CONNECTION', res.headers.get('connection')); // Returns 'close'
if (!res.headers.get('www-authenticate')) {
console.log('Auth error: www-authenticate not found on response of second request');
} else {
const type2msg = ntlm.parseType2Message(res.headers.get('www-authenticate'));
const type3msg = ntlm.createType3Message(type2msg, options);
await RNFetchBlob.fetch('GET', url, {
Accept: '*/*',
Connection: 'Close',
Authorization: type3msg
})
.then(data => console.log('RESULT', data.data))
.catch(e => console.log('Error', e));
}
};
很感谢任何形式的帮助!
最佳答案
在尝试从我们服务器上的Sharepoint Application获取数据之前,我遇到了该问题。
我没有使用任何React本机软件包来解决此问题。我为请求编写了本机模块(适用于Android的Java和适用于iOS的Objective-C),并通过回调将数据带回了JS端。
您可以在此处找到有关如何编写自己的本机模块的示例:
iOS:https://facebook.github.io/react-native/docs/native-modules-ios
Android:https://facebook.github.io/react-native/docs/native-modules-android
关于node.js - 如何在 native 应用程序中实现NTLM身份验证?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57090156/