0

我试图弄清楚如何让 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

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

建议?

4

2 回答 2

1

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

将此添加到政策部分:

      - request-transformer:        
        - action:
            headers:
              remove: ['Authorization']
              add: 
                Authorization: "'Bearer ***'"
于 2020-04-29T01:31:29.010 回答
0

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

 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}"...
于 2021-01-30T20:21:32.557 回答