请教: nest.js 如何优雅做接口鉴权和转发

2022-11-23 18:30:52 +08:00
 selian
背景:后台同时跑了两个服务,php 和 nest ,正在做 php 向 nest 重构的过程,前端通过接口路径区分调用哪个服务的接口,php 接口 v1 后缀,nest 接口 v2 后缀。nginx 配置:部分已经由 nest 重构过的接口流量转发到 nest 服务,未重构的接口代理到 php 服务。
目的:最近想要把接口的鉴权逻辑统一搬到 nest 上,ps:这个鉴权是业务层面的鉴权,不是用户网关鉴权。所以目前的流程是 接口请求统一由 nginx 转发到 nest 服务,nest 服务对接口做鉴权,鉴权不通过的话,nest 直接拦截;鉴权通过的话,转发到 php 服务。

目前尝试了两种方案:
1 、nginx auth_request 模块,php 接口请求全部转发到 nest 提供的一个鉴权接口上,这个鉴权接口和其他部署在 nest 上的业务接口一样走全局鉴权守卫。 问题:post 类型的接口由 auth_request 做了转发会丢失请求体,但是做权限判断的时候需要拿请求体的参数来做权限校验,找了一圈解决方法,就是 lua 脚本读取请求体,然后添加到 header 中进行转发,感觉这种做法又复杂又怪。
2 、php 接口转发到 nest ,nest 使用代理中间件 proxy 转发。问题:nest 只重构了部分接口,大部分 php 接口在 nest 里没有定义,转发到 nest 的话这些接口需要定义一遍。目前也没有找到 node 有代理中间件转发到 php-fpm

请教大佬有没有啥好的解决方法,或者相关的文章可以看看的
4962 次点击
所在节点    Node.js
1 条回复
ChevalierLxc
2022-12-01 15:54:34 +08:00
直接在 PHP 里把验权请求 nest,通过了再走下面的业务?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/897416

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX