#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'
Если у вас несколько аудиторий, то это должна быть одна строка, разделенная запятой. Пробелы между аудиториями недопустимы.