如何解决GCP API 网关 JWT 总是返回 403
我使用 gcp api 网关进行 JWT 身份验证。从我的身份验证服务生成令牌并将其放入邮递员后,无论我在令牌的“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
我已经翻阅了一遍又一遍的文档,但看不到发生了什么?提前致谢。
解决方法
您收到 403,因为您生成的 JWT 令牌上的 aud
在您的 API 配置的securityDefinitions 中找不到。
要允许其他客户端 ID 访问后端服务,您可以使用逗号分隔值在 x-google-audiences
字段中指定允许的客户端 ID。然后,API Gateway 接受具有 aud 声明中任何指定客户端 ID 的 JWT。
转到 here 并粘贴您的令牌以查看您的 JWT“aud”声明。如果您使用 gcloud auth
生成 ID 令牌,则 aud 很可能是像 1234567890.apps.googleusercontent.com
这样的客户端 ID。但是,如果您使用自己的服务生成令牌,则这取决于您指定的目标受众。
要解决此问题,请在 securityDefinitions 部分添加 x-google-audiences
字段,该值应与您的 JWT“aud”声明相匹配。
假设您的 JWT 令牌上的 aud
是 Cloud Run 服务端点,那么您的 API 配置应如下所示。请随意检查 documentation 作为附加参考:
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'
如果您有 multiple 个受众,那么它应该是一个以逗号分隔的字符串。观众之间不允许有空格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。