云端点-是否可以实施JWT?

时间:2019-05-28 14:49:07

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

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

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

2 个答案:

答案 0 :(得分:1)

  

我在一个网站上工作,并且已有使用Google Cloud的身份验证   数据存储。

如果当前的身份验证系统正在生成自己的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

保存生成的令牌。在此示例中,将其称为令牌。

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"
}
  

我似乎找不到任何文档来说明如何生成   面向最终用户的与Cloud Endpoints兼容的JSON Web令牌。

以下是包含有关Google Cloud Endpoints身份验证的详细信息的链接:

Google ID token authentication

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

OAuth令牌(Signed-JWT)是使用私钥签名的。使用公钥验证它们。 Google在https://www.googleapis.com/oauth2/v1/certs

上发布公钥

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

答案 1 :(得分:0)

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