【问题标题】:Cloud Endpoints - Is implementing JWT Possible?Cloud Endpoints - 是否可以实施 JWT?
【发布时间】:2023-04-01 01:00:01
【问题描述】:

我正在开发一个网站,并且存在使用 Google Cloud Datastore 的现有身份验证。我似乎找不到任何文档来说明如何为最终用户生成与云端点兼容的 JSON Web 令牌。

非常感谢您可以清除的任何链接。

【问题讨论】:

    标签: google-app-engine google-cloud-platform cloud google-cloud-endpoints endpoint


    【解决方案1】:

    我正在开发一个网站,并且有使用 Google 云的现有身份验证 数据存储。

    如果您当前的身份验证系统正在生成您自己的 OAuth 令牌,则您无法将这些令牌用于 Google Cloud Endpoints。您必须通过 Google 机制(Google 帐户)生成您的令牌。否则,Google 服务无法验证您的令牌。检查您的后端是否正在创建令牌或使用 Google OAuth 创建令牌。但是,存在三种类型的令牌:访问令牌、刷新令牌和客户端 ID 令牌。您的后端可能需要修改以生成客户端 ID (OIDC) 令牌。有些系统只生成前两个。

    以下假设 Google 颁发了 OAuth 令牌。

    是的,这是可能的,而且非常简单。我给你举个例子。

    注意:我写了一篇关于如何使用 CURL 生成 OAuth 2.0 令牌的文章,包括客户端 ID 令牌。 Google OAuth 2.0 – Testing with Curl – Refresh Access Token我的文章向您展示了步骤,以便您可以使用任何语言进行编码。

    使用 CLI,生成 OAuth 2.0 客户端 ID 令牌:

    gcloud config config-helper --format "value(credential.id_token)" --force-auth-refresh
    

    保存生成的令牌。在本例中将其称为 TOKEN。

    URL 是端点 URL。

    现在向您的端点发出请求:

    curl -H "Authorization: Bearer TOKEN" URL
    

    如果您想了解 TOKEN JWT 中的内容:

    卷曲https://oauth2.googleapis.com/tokeninfo?id_token=TOKEN

    返回的 JSON 将如下所示:

    {
      "aud": "https://cloudtask-abcdefabcdef-uc.a.run.app",
      "azp": "0123456789077420983142",
      "email": "cloudtask@development.iam.gserviceaccount.com",
      "email_verified": "true",
      "exp": "1559029789",
      "iat": "1559026189",
      "iss": "https://accounts.google.com",
      "sub": "012345678901234567892",
      "alg": "RS256",
      "kid": "0123456789012345678901234567890123456789c3",
      "typ": "JWT"
    }
    

    我似乎找不到任何说明如何生成 JSON Web 令牌与最终用户的云端点兼容。

    这是一个链接,其中包含有关 Google Cloud Endpoints 身份验证的详细信息:

    Google ID token authentication

    您可能想知道为什么不能使用自己的令牌。原因是 Google 无法验证令牌上的签名。

    OAuth 令牌 (Signed-JWT) 使用私钥进行签名。它们使用公钥进行验证。谷歌在https://www.googleapis.com/oauth2/v1/certs发布公钥

    这允许 Google 和其他人验证 Google 签名的数据。当您生成令牌时,Google 无法访问您的公钥来验证签名。因此,您必须使用 Google 生成的令牌,以便 Google 可以验证它们。

    【讨论】:

    • 我的申请是从头开始的。我不希望用户必须通过谷歌帐户进行身份验证,因为我有一个用户列表和散列密码。您认为移动它们的最佳方法是什么?
    • 答案取决于认证平台。如果您的用户将使用 Gmail 帐户,那么他们将必须创建帐户。如果您打算使用 Google Identity Platform,则可以在您的帐户下为他们创建帐户。
    • 目前我只使用用户名和密码列表。如果可能,我们不想依赖 OAUTH,或者我们想制作自己的平台。
    • 那么您不能对 Cloud Endpoints 使用授权。您将需要不同的解决方案。我在回答中解释了原因。哪个部分令人困惑?
    【解决方案2】:

    您可以查看this。您仍然需要一个 Google 服务帐户,但只使用其私钥来生成 JWT。 ESP 将对其进行验证。

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 2017-03-23
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多