GCP API Gateway JWT всегда возвращает 403

#google-cloud-platform #jwt #swagger #api-gateway

#google-облачная платформа #jwt #развязность #api-шлюз

Вопрос:

Я использую gcp api gateway для аутентификации JWT. после генерации токена из моей службы аутентификации и последующего ввода его в postman я всегда получаю этот ответ, независимо от того, что я помещаю в часть токена ‘aud’:

введите описание изображения здесь

Вот мой открытый файл api:

 # openapi2-run.yaml
swagger: '2.0'
info:
  title: my-gateway-id
  description: Sample API on API Gateway with a Cloud Run backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
x-google-backend:
  address: https://my-cloud-run.a.run.app
  jwt_audience: https://my-cloud-run.a.run.app
securityDefinitions:
  jwt_auth:
    authorizationUrl: ''
    flow: 'implicit'
    type: 'oauth2'
    x-google-issuer: 'id-admin@my-project.iam.gserviceaccount.com'
    x-google-jwks_uri: 'https://www.googleapis.com/service_accounts/v1/metadata/x509/id-admin@my-project.iam.gserviceaccount.com'
paths:
  /:
    post:
      security:
        - jwt_auth: []
      summary: GraphQL endpoint
      operationId: gql
      responses:
        '200':
          description: A successful response
          schema:
            type: object
 

Я снова и снова просматривал документы и не могу понять, что происходит? заранее спасибо.

Ответ №1:

Вы получаете 403, потому aud что сгенерированный вами токен JWT не найден в определениях безопасности вашей конфигурации API.

Чтобы разрешить дополнительным идентификаторам клиентов доступ к серверной службе, вы можете указать разрешенные идентификаторы клиентов в x-google-audiences поле, используя значения, разделенные запятыми. Затем API Gateway принимает JWT с любым из указанных идентификаторов клиента в заявке aud.

Перейдите сюда и вставьте свой токен, чтобы увидеть ваше требование JWT «aud». Если вы сгенерировали токен ID с помощью gcloud auth , aud, скорее всего, будет похож на идентификатор клиента 1234567890.apps.googleusercontent.com . Но если вы сгенерировали токен, используя свой собственный сервис, тогда это будет зависеть от того, что вы указали в качестве целевой аудитории.

Чтобы решить проблему, добавьте x-google-audiences поле в раздел securityDefinitions, и значение должно совпадать с вашим утверждением JWT «aud».

Предполагая, что aud ваш токен JWT является конечной точкой службы облачного запуска, тогда ваша конфигурация API должна выглядеть следующим образом. Не стесняйтесь проверять документацию в качестве дополнительной ссылки:

 x-google-backend:
  address: https://my-cloud-run.a.run.app 
securityDefinitions:
  jwt_auth:
    authorizationUrl: ''
    flow: 'implicit'
    type: 'oauth2'
    x-google-issuer: 'id-admin@my-project.iam.gserviceaccount.com'
    x-google-jwks_uri: 'https://www.googleapis.com/service_accounts/v1/metadata/x509/id-admin@my-project.iam.gserviceaccount.com'
    x-google-audiences: 'https://my-cloud-run.a.run.app'
 

Если у вас несколько аудиторий, то это должна быть одна строка, разделенная запятой. Пробелы между аудиториями недопустимы.