gpt4 book ai didi

node.js - 如何在react-native应用程序中实现NTLM身份验证?

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:16 27 4
gpt4 key购买 nike

嘿,我正在努力在 React Native 应用程序中实现 NTLM 身份验证。我正在使用这个库https://github.com/SamDecrock/node-http-ntlm ,但为了让它工作,我首先必须从 https://github.com/parshap/node-libs-react-native 添加大量 Node 核心模块和 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 应用程序获取数据时遇到过这个问题。

我没有使用任何 React Native 包来解决这个问题。我为请求编写了 native 模块(Android 的 Java 和 iOS 的 Objective-C),并通过回调将数据带回 JS 端。

您可以在此处找到有关如何编写自己的 native 模块的示例:

iOS:https://facebook.github.io/react-native/docs/native-modules-ios

安卓:https://facebook.github.io/react-native/docs/native-modules-android

关于node.js - 如何在react-native应用程序中实现NTLM身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57090156/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com