Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 解码并将Jwt有效负载设置为请求参数_Node.js_Jwt_Express Gateway - Fatal编程技术网

Node.js 解码并将Jwt有效负载设置为请求参数

Node.js 解码并将Jwt有效负载设置为请求参数,node.js,jwt,express-gateway,Node.js,Jwt,Express Gateway,我们正在使用express gateway提供微服务。我们已经使用Jwt设置了身份验证。我们希望验证jwt并解码有效负载,并将其设置为req参数 这是我们的gateway.config.yml文件 http: port: 8080 admin: port: 9876 host: localhost apiEndpoints: user: host: localhost paths: "/v1/users" product: host: localhos

我们正在使用express gateway提供微服务。我们已经使用Jwt设置了身份验证。我们希望验证jwt并解码有效负载,并将其设置为req参数

这是我们的gateway.config.yml文件

http:
  port: 8080
admin:
  port: 9876
  host: localhost
apiEndpoints:
  user:
    host: localhost
    paths: "/v1/users"
  product:
    host: localhost
    paths: "/v1/products"
serviceEndpoints:
  user:
    url: http://localhost:3001
  product:
    url: http://localhost:3000
policies:
- basic-auth
- key-auth
- cors
- expression
- log
- oauth2
- proxy
- rate-limit
- jwt
pipelines:
- name: default-1
  apiEndpoints:
  - user
  policies:
  - jwt:
    - action:
        secretOrPublicKey: privatekey
        checkCredentialExistence: 'false'
  - proxy:
    - action:
        serviceEndpoint: user
- name: default-2
  apiEndpoints:
  - product
  policies:
  - jwt:
    - action:
        secretOrPublicKey: privatekey
        checkCredentialExistence: 'false'
  - proxy:
    - action:
        serviceEndpoint: product

我的Jwt有效负载令牌看起来像

{
  "org": "1234567890",
  "siteID": "343434343",
  "expiry": "600"
}
在解码和验证jwt签名后,网关应将有效负载信息设置为req

req.org = payload.org
req.siteId = payload.siteId
这将传递给我们的底层微服务。 如何做到这一点。我应该在gateway.config.yml文件中设置更多参数吗。 请给我一些建议。
谢谢

您需要做的就是从
req.user
中获取这些属性,这是存储已解码有效负载的地方。

我不知道为什么请求对我无效,并且当请求到达serviceEndpoint时,没有
req.user

经过数小时的头发拉扯,我发现了以下链接:

默认情况下,似乎没有添加
req.user
,需要使用
request transformer
并根据需要将其添加到正文或标题中。 我真的不知道文档中是否提到了这一点(我指的是jwt部分)


编辑:我正在使用express gateway 1.16.10

很抱歉,这对我不起作用,您认为问题出在哪里?当请求离开指定的express Gateway时,req.user id未定义。Express Gateway永远不会修改您的请求负载。如果需要,您需要有效地显式添加它。
policies:
      -
        jwt:
          action:
            secretOrPublicKey: theKEY
            checkCredentialExistence: false
      -
        request-transformer:
          action:
            body:
              add:
                user: req.user