从 React 应用程序调用 Kerberos 节点库

问题描述 投票:0回答:1

我正在使用 NodeJS v18.18.0 构建一个客户端 React 应用程序,该应用程序通过 Kerberos 对用户进行身份验证。我打算使用节点库 kerberos (https://www.npmjs.com/package/kerberos)。该包是 Node.js 的 C++ 扩展。我需要获得的只是一张由 SPN 标识的服务的 kerberos 票证。

但是,由于我需要从浏览器上运行的 React 应用程序调用该库,我想我首先需要对其进行浏览器化。 在节点中,使用 CommonJS,我使用调用 const reactKerb = require('kerberos'); 的库一切都很好。

在使用 ES6 的 React 中,我需要诉诸 import。

.

这就是我所做的:

  1. 安装kerberos

    npm install kerberos
    
  2. 使用以下内容编辑文件 kerbConverter.js:

    const reactKerb = require('kerberos');
    module.exports = reactKerb;
    
  3. 安装并运行browserify

    npm install -g browserify
    browserify kerbConverter.js -o reactKerb.js
    
  4. 现在我应该在reactKerb.js中有相同的库,可以从React调用

    在另一个模块中我可以做

    import kerberos from 'reactKerb';
    

但是,当我运行 React 应用程序时,我收到这些错误

  Line 97:9:   '__non_webpack_require__' is not defined                               no-undef
  Line 175:3:  Expected an assignment or function call and instead saw an expression  no-unused-expressions

抱怨

Line  97  var requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require;
...
line 173     // run the 'prepareStackTrace' function above
line 174       Error.captureStackTrace(dummy);
line 175       dummy.stack;

是否可以将一个节点库迁移到另一个可由 React 调用的节点库? 如果答案是肯定的并且 browserify 是正确的方法,我该如何解决上述错误? 我是 NodeJs 和 React 的新手,我在这里迷失了。预先感谢。

reactjs kerberos browserify
1个回答
0
投票

您无法以有用的方式浏览

kerberos
。它的所有功能不仅依赖于无法从 Web 访问的系统库 (libgssapi) 的 C 绑定,而且全部依赖于能够访问用户缓存的 TGT 的库 - 浏览器不会提供。即使您可以将整个 libgssapi 编译为 WASM – 或者即使您找到了pure-JS Kerberos 实现 – 您仍然需要为其提供新的凭据(用户名和密码)并让它从头开始获取 TGT ,这或多或少会破坏使用 Kerberos 的意义。

在 Web 浏览器中,您只能使用现有 API(XHR/fetch)发出经过 Kerberos 身份验证的 HTTP 请求;浏览器将自动确定

HTTP@<domain>
SPN,并添加带有令牌的 HTTP 标头。无法在浏览器中针对非 HTTP 协议使用 Kerberos。

© www.soinside.com 2019 - 2024. All rights reserved.