Google 不记名令牌:哪一个是正确的?
Google Bearer token: which one is the correct one?
我是 Google 云存储的新手,我正在尝试通过 GET 方法构建 HTTP 请求。我想访问我的云存储中的一个页面,但我需要一个授权密钥,例如:httpRequest:write("Authorization: Bearer ~~token here~~")。但我不知道我应该使用什么令牌。我在 Lua 中这样做,如果它是相关的并且唯一的问题是身份验证,因为当我尝试访问 public 对象时我没有任何问题。
提前致谢。
Google 云使用 OAuth 2 进行身份验证。您的请求将以某种凭据(私钥、Google 帐户密码、刷新令牌)开头,并以 "access token" 结尾,它将在您的授权 header 中的那个位置].根据您作为哪种实体进行身份验证,有多种不同的方法。例如,独立应用程序通常有一个与服务帐户关联的私钥,它使用该密钥来签署访问令牌请求。如果您正在编写一个使用某些用户的 Google 凭据运行的应用程序,则有一个复杂的 three-party 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
header。
整个事情相当复杂,这就是为什么大多数语言都有帮助程序库的原因(虽然没有 Lua,据我所知)。此外,如果您的程序在 GCE 中 运行,您可以利用应用程序默认凭据,这将有助于简化问题。
整个过程记录在此处:https://developers.google.com/identity/protocols/OAuth2。我描述的流程是 "Service Accounts." 另一种选择是获取刷新令牌
我是 Google 云存储的新手,我正在尝试通过 GET 方法构建 HTTP 请求。我想访问我的云存储中的一个页面,但我需要一个授权密钥,例如:httpRequest:write("Authorization: Bearer ~~token here~~")。但我不知道我应该使用什么令牌。我在 Lua 中这样做,如果它是相关的并且唯一的问题是身份验证,因为当我尝试访问 public 对象时我没有任何问题。
提前致谢。
Google 云使用 OAuth 2 进行身份验证。您的请求将以某种凭据(私钥、Google 帐户密码、刷新令牌)开头,并以 "access token" 结尾,它将在您的授权 header 中的那个位置].根据您作为哪种实体进行身份验证,有多种不同的方法。例如,独立应用程序通常有一个与服务帐户关联的私钥,它使用该密钥来签署访问令牌请求。如果您正在编写一个使用某些用户的 Google 凭据运行的应用程序,则有一个复杂的 three-party 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
header。
整个事情相当复杂,这就是为什么大多数语言都有帮助程序库的原因(虽然没有 Lua,据我所知)。此外,如果您的程序在 GCE 中 运行,您可以利用应用程序默认凭据,这将有助于简化问题。
整个过程记录在此处:https://developers.google.com/identity/protocols/OAuth2。我描述的流程是 "Service Accounts." 另一种选择是获取刷新令牌