📅  最后修改于: 2023-12-03 15:15:24.037000             🧑  作者: Mango
本文介绍了如何使用 JSON Web Tokens(JWT)来保护 Google Cloud Platform 中的 Cloud Run REST API。JWT 是一种用于安全地传输信息的开放标准,用于在请求之间传递声明。通过使用 JWT,您可以验证请求的合法性,提高 API 的安全性。
在开始之前,您需要满足以下条件:
首先,我们需要生成一个用于签名和验证 JWT 的密钥对。可以使用下面的命令在本地生成密钥对。
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
这将在当前目录下生成名为 private.pem
和 public.pem
的密钥文件。
接下来,我们需要在 Google Cloud Platform 上创建一个 Cloud Run 服务。可以使用以下命令进行部署:
gcloud run deploy <service-name> --region=<region> --image=<container-image-url> --allow-unauthenticated
确保将 <service-name>
替换为您希望创建的服务名称,<region>
替换为您希望部署服务的地区,<container-image-url>
替换为您的容器镜像 URL。
在 Cloud Run 上启用认证后,只有带有有效 JWT 的请求才能访问您的 REST API。可以使用以下命令为 Cloud Run 服务启用认证:
gcloud run services update <service-name> --update-env-vars=AUTHENTICATION=service_account
确保将 <service-name>
替换为您创建的服务的名称。
为了验证 JWT,我们需要将服务账号配置到 Cloud Run 服务中。可以使用以下命令为 Cloud Run 服务配置服务账号:
gcloud run services update <service-name> --service-account=<service-account-email>
确保将 <service-name>
替换为您创建的服务的名称,<service-account-email>
替换为您的服务账号的邮箱地址。
在您的 Cloud Run 服务中,您可以通过以下方式从请求中验证和解码 JWT:
import jwt
from google.auth import jwt
def validate_jwt(request):
encoded_jwt = request.headers.get('Authorization', '')
try:
decoded_jwt = jwt.decode(encoded_jwt, public_key, algorithms=['RS256'])
# JWT 验证通过,继续处理请求
return 'Authenticated'
except (jwt.exceptions.InvalidTokenError, jwt.exceptions.DecodeError):
# JWT 验证失败,返回错误响应
return 'Unauthorized'
确保将 public_key
替换为您生成的 public.pem
文件中的密钥。
通过使用 JWT,您可以有效地保护 Cloud Run REST API 的安全性。本文提供了了解如何生成 JWT 密钥对、创建 Cloud Run 服务、启用认证并从请求中验证 JWT 的步骤。现在,您可以使用 JWT 来保护您的 Cloud Run REST API,以确保只有合法请求能够访问。