问题标签 [express-gateway]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如何使用快速网关将多个响应与单个网关端点结合起来
我正在尝试在网关处创建一个端点,该端点将调用多个服务调用并将它们组合成一个响应。快递网关可以吗?
这是我的 gateway.config.yml。
基本上,我想将所有声明的 serviceEndpoints 组合到一个路径。假设我触发 /ip ,它将调用 'api,uuid,agent' serviceEndpoints 并将它们全部组合成一个响应。那可能吗?
node.js - 有没有一种简单的方法可以从 express-gateway 服务生成 API 文档?
有没有一种简单的方法可以从 express-gateway 服务生成 API 文档?例如使用招摇?在传统方式中,文档是基于函数的注释生成的,在 express-gateway APIS 中定义在 gateway.config.yml 文件中,并且 swagger 不知道如何处理它。
express - 关于使用 Express-Gateway 进行 API 访问和使用 JWT 进行用户身份验证的建议
我在 Express 中有一个服务器,它向 Web 应用程序公开一些 API。我正在寻找一种管理最终用户和第 3 方身份验证的好方法。
现在,当用户使用电子邮件和密码注册时,服务器会生成与该用户关联的 JWT。
当 Web 客户端收到该令牌时,它会将令牌存储在 cookie/web_storage 中,并将其用于对服务器的每个 API 调用以及自动登录。令牌还包含role
,因此当服务器收到请求时,它知道该用户/角色是否可以访问所请求的路由/资源。
现在一些第 3 方想要访问我的一些API。我想创建一个 Express-Gateway 来为想要使用我的服务器的应用程序制作 api-keys,并为单个用户保留现有的 JWT 身份验证。
所以我会有
- 我的 Web-App 应该访问所有 API,因为我的 Web-App 被
admin
s(像我一样)和我们的用户(customers
和shops
)使用。 - 3rd 方应用程序应仅访问某些 API,因为它们将仅是
customers
和shops
.
所以我想做这样的事情:
最后,我的 Web 应用程序将有一个包含所有范围的 ApiKey,而第 3 方 ApiKeys 将只有user
范围,所以我可以过滤路由。单个真实用户,无论使用何种 App,都将使用 JWT 令牌登录并发出请求。
因此,每个请求都会有一个 ApiKey(基于所使用的应用程序)和一个 JWT 令牌(用于识别用户):
- ApiKey 将由第 3 方服务器添加到标头中,
- JWT 令牌将由用户浏览器的 web_storage (检索并)添加到标头中。
听起来不错?
api-key - Express-Gateway,提供相同的 API 路径/路由,但在不同的 ServiceEndpoints 下
我在 Node.js + Express 中有一个服务器,它向公众和管理员公开了一些 API。实际上我有 2 个正在运行的克隆实例,一个用于测试,一个用于生产。它们是双胞胎,公开相同的路由(/admin
, /public
),但连接到两个不同的数据库,并部署在两个不同的地址上。
我想使用 Express-Gateway 向 3d 方提供 API,所以我将首先让他们访问测试服务器。全部完成后,我还将为他们提供生产访问权限。
为此,我的想法是只创建 1eg user
和多个eg application
. 每个eg application
人都eg credentials
必须访问服务器或生产。
根据提供的凭据,网关应将请求重定向到server_test.com
或server_prod.com
。我的想法是用来eg scopes
处理对正确端点的请求。因此,服务器测试策略将需要范围api_test
,而服务器产品将需要api_prod
范围。
无论如何,这个解决方案不起作用,因为如果第一个匹配apiEndpoints
失败,它只会导致“未找到”。
示例:我请求使用带范围的http://gateway.com/public
App Prod 凭据。api_prod
它应该被传递给http://server_prod.com/public
,但它匹配第一个paths: '/*'
,testEndpoint
并且不符合范围条件。所以它只是失败了,而正确的 apiEndpoint 应该是prodEndpoint
.
我怎么解决这个问题?
这是我的 gateway.config.yml
heroku - Heroku 上的 express-gateway - {$PORT} 绑定错误
我已经在 Heroku 上部署了我的 express-gateway,在gateway.config.yml
文件中以这种方式使用 env 变量:
无论如何 Heroku 不断给出这个错误:
我${ENV_VAR_NAME:-DEFAULT}
根据官方文档使用了该符号。为什么 Heroku 尝试绑定 8080?
====== 更新
对于谁将使用 Heroku,这只是一个无关紧要的提示,这是我从 env vars获取redis url 的方法。
jwt-auth - Express Gateway - 远程身份验证服务器的 JWT 验证策略 checkCredentialExistence
我使用 express gateway 作为 API Gateway 中间件,设置如下。
- Express 网关仅用作网关。
- 我的身份验证(用户数据库)服务器位于不同的位置,我将所有登录请求路由到身份验证服务器以获取 jwt。
- 多个资源服务器位于快速网关后面。这不会授权或验证任何请求。所有传入的请求都被视为已通过身份验证
我已经设置了 EG 配置,以便它验证 JWT 并仅通过正确的 JWT 传递请求。因为网关本身的授权checkCredentialExistence
。
问题
当用户发送注销请求时,我从身份验证服务器撤消了访问和刷新令牌。但是,被撤销的JWT 令牌仍然是有效的令牌。网关继续通过已撤销的 jwt 传递传入的请求。
如果 JWT 在 Express 网关中仍然有效,有没有办法检查远程 api?
node.js - https 自签名证书上的 Express Gateway 错误,即使在 Node 中禁用了证书验证
我正在玩耍和学习Express Gateway。入门指南要求我调用 https 端点。我的组织通过一个中间箱运行所有请求,该中间箱嗅探 https 内容并将其根证书安装在我们的机器上。因此,基本上所有 https 有效负载都使用组织自己的证书进行签名。
基本上,当 Express Gateway 进行调用并看到它不信任的证书时,它会引发错误。我尝试设置NODE_TLS_REJECT_UNAUTHORIZED=0
为暂时禁用证书验证,但我仍然看到错误并且连接被拒绝:
如何在 Express Gateway 中暂时禁用证书验证?
作为一个长期的解决方案,我看过一篇关于如何通过设置环境变量让Node 信任我的操作系统证书NODE_EXTRA_CA_CERTS
的帖子,但我不知道在我的系统上指向哪个文件作为证书文件
更新 1 (2020.26.02)
我听从了维琴佐的建议,并尝试直接调用脚本而不是通过 annpm script
但它不起作用。我在server.js
文件顶部添加了一个控制台日志以查看NODE_TLS_REJECT_UNAUTHORIZED
. 当我不设置变量时,我尝试代理到 https 服务,这就是我所看到的:
当我设置变量,再次直接执行脚本时,这就是我所看到的——网关仍然拒绝自签名证书:
express-gateway - Express Gateway:使用 Request-Transformer 策略添加参数,但在条件下
在我的 Node 系统中,我有一个服务器公开了一些 API,可以通过 Express Gateway 访问。req.body
根据使用我的 API 的应用程序,我想强制在 中添加一些参数。
为此,我使用个性化scope
价值。例如,我有 App1 和 App2(及其凭据)使用我的 API。因此,在例如凭据中,我将范围添加app1
到 App1 凭据和app2
App2 凭据的范围。
在gateway.config.yml
我写的文件中:
但我得到这个错误:
=============
实际看 JSON 转换action
,request-transformer
. 缩进不好。
express-gateway - Express-Gateway:egContext 下缺少范围 - apiEndpoint.scopes
我想根据凭证的范围强制在 req.body 中添加一个文件。我有 2 个应用程序(App1 和 App2),根据谁在使用我的 API,我想以编程方式在请求中添加一个字段。所以 App1 的凭证有范围app1
,并且app2
在 App2 的范围内。
此外,我有 2 个具有不同端点的环境。两个应用程序都可以访问两端(使用不同的凭据)。所以我首先选择Env(使用dev_env
或my_env
范围),然后我验证哪个App正在访问(检查app1
或app2
范围)。
为此,我使用表达式apiEndpoint.scopes.indexOf('app1')>=0
。这实际上是行不通的,因为条件总是false。因此,出于调试目的,我将apiEndpoint.scopes
作为附加字段的内容放在 中req.body
,以查看其中的内容。
而且我看到它apiEndpoint.scopes
只是["my_env"]
,而不是“app1”。为什么?
所以我有
req.body 的内容是
'app1' 不见了!
==== 更新 1 如果req.body.available_scopes
我在字段中输入“消费者”,我得到了这个:
所以它谈到“authorizedScopes”,其他人在哪里?我怎么能看到他们?谢谢
docker - docker-compose 和 express-gateway 在本地显示包网关
我想在我的电脑上本地运行我的 express-gateway 并有两个服务用于访问我的网关,问题是总是有同样的问题“坏网关”我用其他公共 api 测试并且工作正常,如何在本地运行它没有这个问题?因为总是显示“坏网关”:
我的 docker-compose.yml
这是我的快速网关上的配置。我的 gateway.config.yml :