【问题标题】:Express Gateway - Proxy request with Bearer TokenExpress Gateway - 带有承载令牌的代理请求
【发布时间】:2021-01-31 04:21:32
【问题描述】:

我正在试图弄清楚如何让 Express Gateway 在请求中使用 Auth Bearer 令牌,上游到 api 服务。

以下是我目前的配置。

http:
  port: 8080
admin:
  port: 9876
  host: localhost
apiEndpoints:
  api:
    host: localhost
    paths:
      - '/truck-api/*'
      - '/car-api/*'
serviceEndpoints:
  truck-service:
    url: 'http://10.0.0.2:5010/api'
  car-service:
    url: 'http://10.0.0.2:5011/api'
policies:
  - basic-auth
  - cors
  - expression
  - key-auth
  - log
  - oauth2
  - proxy
  - rate-limit
  - rewrite
  - request-transformer
pipelines:
  default:
    apiEndpoints:
      - api
    policies:
      - proxy:
          -
            condition:
              name: pathMatch
              pattern: "^/truck-api/(.*)"
            action:
              serviceEndpoint: truck-service
              prependPath: true
              ignorePath: false
              stripPath: true
              changeOrigin: true
          -
            condition:
              name: pathMatch
              pattern: "^/car-api/(.*)"
            action:
              serviceEndpoint: car-service
              prependPath: true
              ignorePath: false
              stripPath: true
              changeOrigin: true

前端使用正确的身份验证承载令牌调用 Express 网关,但是 Express 网关不会将该身份验证承载令牌转发到上游服务。

建议?

【问题讨论】:

    标签: express-gateway


    【解决方案1】:

    经过一番挖掘和反复试验,解决方案相对简单,使用请求转换器。

    将此添加到政策部分:

          - request-transformer:        
            - action:
                headers:
                  remove: ['Authorization']
                  add: 
                    Authorization: "'Bearer ***'"
    

    【讨论】:

      【解决方案2】:

      对我来说删除:['Authorization'] 不起作用。 我正在使用以下方式对快速网关进行身份验证: "Authorization: apiKey ${keyId}:${keySecret}" 并使用请求转换器添加的 Authorization: "'Bearer ***'" 向后端服务进行身份验证。我希望删除:['Authorization'] 将删除“授权:apiKey ${keyId}:${keySecret}”,在我已经在快速网关成功验证并添加:授权:“'Bearer ***'”之后添加新的 Authorization 标头,因此新构造的请求将用 Bearer 令牌替换 apiKey,但使用 remove: ['Authorization'] 导致无法在快速网关进行身份验证。 我通过使用 apiKeyHeader (https://www.express-gateway.io/docs/policies/key-authorization/) 更改用于快速网关端授权的 HTTP 标头解决了这个问题。

       policies:
        - request-transformer:
          - action:
              headers:
                add:
              # pass oauth2 token
                  Authorization: "'Bearer ***'"
        - key-auth:
          - action:
              # arbitrarily rename default header name from Authorization
              apiKeyHeader: open_sesame
      

      open_sesame 标头授予我们对 api 网关的访问权限,request-transformer 将带有适当令牌的授权标头添加到访问后端服务的请求中。

      curl -v -H "open_sesame: apiKey ${keyId}:${keySecret}"...
      

      【讨论】:

        猜你喜欢
        • 2019-05-11
        • 2021-09-01
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        • 2016-03-06
        • 2011-03-22
        • 2019-06-29
        • 2020-03-05
        相关资源
        最近更新 更多