3

我们正在为我们的微服务使用 express-gateway。我们已经使用 Jwt 设置了身份验证。我们要验证 jwt 并解码 payload 并将其设置为 req params

这是我们的 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 文件中设置更多参数吗?请指教。谢谢

4

2 回答 2

0

您需要做的就是从中获取这些属性req.user——解码后的有效负载存储在其中。

于 2019-09-05T06:17:35.167 回答
0

我不知道为什么答案对我不起作用,当请求到达 serviceEndpoint 时没有req.user.

经过几个小时的拉扯,我找到了这个链接: https ://www.express-gateway.io/docs/policies/request-transformer/

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

policies:
      -
        jwt:
          action:
            secretOrPublicKey: theKEY
            checkCredentialExistence: false
      -
        request-transformer:
          action:
            body:
              add:
                user: req.user

编辑:我正在使用 express-gateway 1.16.10

于 2020-01-30T00:56:43.677 回答