我正在使用 Webpack 5 Module Federation 来使用远程模块。一切都按预期工作。
到目前为止,远程模块 URL 是公开的,不需要任何类型的身份验证。这对开发人员来说很好。目的。但在生产中,访问该远程模块将需要某种身份验证。
我在 Webpack 文档中找不到任何关于身份验证的信息。
我想知道在这种情况下我有什么选择?
我正在使用 Webpack 5 Module Federation 来使用远程模块。一切都按预期工作。
到目前为止,远程模块 URL 是公开的,不需要任何类型的身份验证。这对开发人员来说很好。目的。但在生产中,访问该远程模块将需要某种身份验证。
我在 Webpack 文档中找不到任何关于身份验证的信息。
我想知道在这种情况下我有什么选择?
但是,如果您了解原理 - 您可以实现任何重用逻辑并实现任何身份验证。
我有管理面板并分为核心和几个模块。
我将管理面板分为 3 个部分:
我的 auth 像 JWT auth 一样工作(为每个请求添加了 auth 标头)。我将标头授权写入标头并在每个请求中传递令牌。
所以当我从模块发出任何请求时,任务就是在模块中获取这个令牌。如果没有这个逻辑,我会得到 301 并重定向,因为请求没有标头。
为此,我使用 axios 拦截器为每个请求添加标头(在核心中)和用户类从每个请求的本地存储中提取令牌(User.getToken() - 也在核心模块中)
您可以像在后端微服务中一样使用模块联合来实现交叉身份验证。
我完成已解决任务的步骤
这个怎么运作
当您在核心主机模块中导入 User 和 init 时 - 它会创建新实例,并且此类的新导入将返回指向新创建的类的链接。但是如果你从 remoteEntry.js 导入这个类 - 将创建一个新实例,所以你需要先初始化它。这取决于您何时启动它以及您是否需要它。
但是如果你想在多个模块中使用同一个类,你需要在使用前进行初始化,因为 webpack bundle 和 remoteEntry.js 不共享创建的类实例。
结果,您将在 Core 和 module1 中拥有 User 类,与使用 User.getToken() 的拦截共享 axios,我希望它适用于您的情况:)
感谢您的阅读,祝您有美好的一天!:)
https://codesandbox.io/s/relaxed-bhaskara-tzlrj?file=/src/EmployeesModule.js 这里是例子
您应该在托管您的联合模块的服务器上进行一些身份验证,例如 nginx。
proxy_cache_path /data/nginx/cache levels=1 keys_zone=foo:10m;
server {
...
location / {
auth_jwt "closed site";
auth_jwt_key_request /jwks_uri;
}
location = /jwks_uri {
internal;
proxy_cache foo;
proxy_pass http://idp.example.com/keys;
}
}