laravel Google API网关:未转发授权标头

vhmi4jdf  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(144)

我部署了一个Google Cloud API网关,用于向云运行服务发送请求。
cloud run服务托管了一个laravel docker容器镜像,为了对我的认证页面进行认证,我需要发送一个Authorization头(Authorization: Bearer my-user-token-here)。
当我将请求直接发送到云运行服务时,我能够获得所需的响应,并设置了Authorization头。但是,当我通过API网关发送请求时,我总是收到一条未经身份验证的消息,显示在对云运行的api请求中缺少头部。我不确定这一点。
我在google cloud API gateway上找不到任何有用的文档来建议cloud run是否会删除header。
我也不确定这个错误是否来自openapi. yaml。到目前为止,我意识到我不能使用openapi文档的v3,而是v2,因为api网关不支持v2。在openapi文档的v2中,securityDefinitions不支持Authorization header Bearer token,而是支持Authorization header basic。
我的Openapi yaml

# openapi2-run.yaml
swagger: "2.0"
info:
  title: my-api
  description: my custom api
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
consumes:
  - application/json
x-google-backend:
  address: https://some-cloud-run-url
basePath: /api
host: my-api.nw.gateway.dev
x-google-endpoints:
  - name: "my-api.nw.gateway.dev"
    allowCors: True
paths:
  /user:
    get:
      summary: Requested user details.
      operationId: UserDetails
      responses:
        "200":
          description: Return Requested User Details.
          schema:
            type: string
        "default":
          description: Unexpected error

字符串
令人惊讶的事实是,如果我在本地或直接向云运行发送请求,它会工作,我不会得到任何身份验证错误,但当我使用api-gateway时,我会得到错误。因此,我猜测这与请求到达云运行时头部丢失有关,可能是因为我这里的yaml定义没有授权头部。

ar5n3qh5

ar5n3qh51#

我们有一个API网关示例,它向云函数发送请求。
如果任何传入的请求具有Authorization报头,则网关将报头细节Map到云函数的请求中的X-Forwarded-Authorization报头。
我假设对Cloud Run的请求也是一样的。我没有任何经验与Laravel知道,如果它有选项,看看在转发头,虽然。

qc6wkl3g

qc6wkl3g2#

实际上,您可以通过在x-google-backend中设置disable_auth来忽略它。
该文件是不是在谷歌网关,但在谷歌端点如下。https://cloud.google.com/endpoints/docs/openapi/openapi-extensions
该文件称:
配置目标后端时,如果满足以下任一条件,则可能不希望使用IAP或IAM对来自ESPv 2的请求进行身份验证:
后端应该允许未经身份验证的调用。

后端需要API客户端的原始Authorization头,不能使用X-Forwarded-Authorization(在jwt_audience部分有说明)。

因此,在您的特定情况下,您只需要像这样修改单个块:

x-google-backend:
  address: https://some-cloud-run-url
  disable_auth: True

字符串
它会像一个魅力。
请注意,一旦您决定自己进行授权,您就不能在网关配置中设置securityDefinitions。如果你这样做gcp网关会抛出401。

k4aesqcs

k4aesqcs3#


的数据
能够解决它使用下面的片段所提到的payon.附加屏幕截图与工作语法。

相关问题