Google Cloud Platform – 使用 JWT 保护 Cloud Run REST API
如果您碰巧在 Google Cloud Run 上构建 REST API,那么保护 API 是其中的关键方面之一。它是无服务器的,并将来自 Cloud SQL 数据库的数据作为 REST API 公开。可以使用 JWT 来保护 REST API。为了更好地理解它,让我们举个例子。
问题陈述:
假设存在一个名为 TripBuddy 的应用程序,它可以记录您的行程。 TripBuddy 建立了一个系统来记录客户的在线行程。您是为 TripBuddy 工作的开发人员,TripBuddy 是一项记录旅行的服务。您构建了一个 REST API,使用户能够通过 Web 和移动应用程序跟踪他们的活动。事实证明,在 Cloud Run 中构建 REST API 非常容易。作为奖励,Cloud Run 是无服务器的,因此无需管理服务器。 TripBuddy 只会按通话付费,没有固定费用。
解决方案:
在本文中,我们将了解该公司如何确保每个用户只能访问他们自己记录的行程。
您在 Cloud Run 中构建了 REST API 作为概念证明。现在它运行良好,您需要解决安全问题。用户应该只能查看和编辑自己的行程,而不能查看和编辑其他用户的行程。第一个想法是服务器会将用户的 ID 发送到 Web 客户端。当该用户登录时,Web 客户端会在访问 REST API 时将用户的 ID 发送回服务器。
但是您记得不能信任在客户端上运行的代码。恶意用户可以修改客户端代码,使其发送与从服务器接收到的用户 ID 不同的用户 ID。您又回到了我们开始的地方,因为任何客户都可以阅读任何记录的旅行。
这就是JWT(JSON Web 令牌)发挥作用的地方。当客户端应用程序登录时,它从由服务器签名的服务器获取用户 ID。然后,客户端应用程序将 JSON Web 令牌附加到它对服务器进行的任何 REST 调用。
作为 JWT 标准的一部分,服务器对所有令牌进行数字签名。如果客户端应用程序修改了令牌并将其发送回服务器,服务器将知道它被篡改并可以拒绝调用。
这意味着您在服务器上运行的代码可以信任它从客户端获取的用户 ID。在查询用户的记录行程时,您可以在 SQL 代码中使用该用户 ID。
这在原则上听起来很棒,而且同样易于实施。您可能没有密码学经验。每当您像这样编写与安全相关的代码时,最好依靠经过良好测试的库。如果你这样做,留下安全漏洞的风险就会降低。
幸运的是,您不必创建 JSON Web 令牌。谷歌的服务器就是这样做的。当您解码令牌时,您可以使用 Google 提供的库。