Google的Bearer token:哪一个是正确的?

我完全是新手 Google Cloud Storage,我正在尝试通过 GET 方法构建 HTTP 请求。我想访问我的云存储中的一个页面,但我需要一个授权密钥,例如:httpRequest:write("Authorization: Bearer 令牌在这里")。但我不知道应该使用什么令牌。 如果这与Lua有关,则唯一的问题是身份验证,因为当我尝试访问公共对象时,我没有任何问题。

提前致谢。

点赞
用户81491
用户81491

Google Cloud 中的身份验证

Google Cloud 使用 OAuth 2 进行身份验证。您的请求将以某些凭据(私钥、Google 帐户密码、刷新令牌)开头,并以“访问令牌”结尾,该令牌将放在您的授权标头中。基于您正在验证的实体类型,有各种不同的方法。例如,独立应用程序通常具有与服务帐户关联的私钥,并使用该密钥对访问令牌请求进行签名。如果您正在编写一个运行于某个用户的 Google 凭据下的应用程序,则会有一个复杂的三方 OAuth 握手,最终您将收到一个访问令牌。

假设您正在编写一个独立应用程序并将使用服务帐户。创建服务帐户时,您将获得一个私钥。您将构建一个“JWT claim set”,描述您想要访问的范围。以下是一个示例:

{
  "iss":"761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
  "scope":"https://www.googleapis.com/auth/devstorage.readonly",
  "aud":"https://www.googleapis.com/oauth2/v4/token",
  "exp":1328554385,
  "iat":1328550785
}

然后,您将使用私钥进行签名,并将其提交给 Google 的 OAuth2 服务。响应将包含一个访问令牌。以下是一个响应示例:

{
  "access_token" : "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M",
  "token_type" : "Bearer",
  "expires_in" : 3600
}

接下来,当您在接下来的一个小时内进行请求时,您将包含一个 Authorization: Bearer 1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M 标头。

整个过程相当复杂,这就是为什么大多数语言都有助手库(尽管我不知道 Lua 有没有)。此外,如果您的程序在 GCE 中运行,您可以利用应用程序默认凭据来简化问题。

整个过程在这里有详细文档:https://developers.google.com/identity/protocols/OAuth2。我描述的流程是“服务帐户”的流程之一。另一个选项是获取一个刷新令牌。

2016-01-14 22:00:55