Google Bearer令牌:哪一个是正确的?

时间:2016-01-14 20:01:35

标签: lua google-cloud-storage

我对Google云端存储完全陌生,我尝试通过GET方法构建HTTP请求。我想访问我的云存储中的一个页面,但我需要一个授权密钥,例如:httpRequest:write("授权:Bearer ~~ token here ~~")。但我不知道我应该使用什么标记。我在Lua中这样做,如果它是相关的,并且唯一的问题是身份验证,因为当我尝试访问公共对象时,我没有任何问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

Google Cloud使用OAuth 2进行身份验证。您的请求将以某种凭据(私钥,Google帐户密码,刷新令牌)开头,并以"访问令牌"结尾,这将在您的授权标头中的那个位置。根据您要认证的实体类型,有多种不同的方法。例如,独立应用程序通常具有与服务帐户关联的私钥,并且它使用该密钥来签署访问令牌的请求。如果您正在编写使用某些用户的Google凭据运行的应用,那么会有一个复杂的三方OAuth握手,最后是您收到访问令牌。

假设您正在编写独立应用,它将使用服务帐户。创建服务帐户时,您将获得私钥。您将构建一个" JWT声明集"描述您喜欢的访问范围。这是一个例子:

{
  "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中运行,您可以利用Application Default Credentials,这有助于简化问题。

此处记录了整个过程:https://developers.google.com/identity/protocols/OAuth2。我描述的流程是用于"服务帐户的流程。"另一种选择是获得刷新令牌