Google 云 运行 使用 PKCE 的 OAuth2 身份验证

Google Cloud Run OAuth2 Authentication with PKCE

我需要使用 PKCE 在 Cloud 运行 中验证服务帐户(具有容器调用角色)。 基本上我的 iOS 应用程序发送 HTTPS 请求来调用某些 Cloud 运行 容器(使用 Django Rest Framework)。

我找到了这个 example(它通过自签名 JWT 向云 运行 端点进行身份验证以换取令牌)。这正是我所需要的,但我想添加 PKCE。我对将 code_verifier 和 code_challenge 发送到哪里感到困惑?如果我在我的容器中进行验证,那将如何 link 到 Cloud 运行 授权。

Google OAuth 没有实现 PKCE。

PKCE 是授权代码流程的一部分。服务帐户不使用此流程。

授权代码流不是Google服务帐户授权的一部分,因为双方都被认为是可信的。移动设备不是受信任的设备,因此不要在移动设备上存储服务帐户。

(不好的)解决方案是生成一个服务帐户密钥文件并将其嵌入到您的 iOS 应用程序中;但是,正如 John 所提到的,如果您这样做,您将失去对密钥的控制,因为您的手机不安全。而不是这样做,让你的服务 public!!

好的模式是不要让您的用户直接调用您的私有和安全服务,而是要有一个 public 网关来执行用户安全检查。因此,您将使用用户的 OAuth 流程在后端对其进行身份验证,并且该后端将能够使用正确的服务帐户调用您的服务。

您可以自己完成,但更好的选择是使用 API 网关,例如 GCP 上的 Cloud Endpoint。您可以在其上插入 firebase 身份验证。您的开销很小,并且您的安全性得到了提高!我 wrote and article in relation with this (it's about API Keys, but replace the API Key security definition by the firebase auth security definition,很享受!)