1

如何为 Google 服务帐户 API REST 发出身份验证请求?

身份验证文档:https ://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests

我不确定签名的值应该是什么?

{"alg":"RS256","typ":"JWT"}.
{
"iss":"761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/prediction",
"aud":"https://www.googleapis.com/oauth2/v4/token",
"exp":1328554385,
"iat":1328550785
}.
[signature bytes]

文档只是说“签名字节”。我从哪里得到这个“签名”?

标题:

{"alg":"RS256","typ":"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
}

签名:

{Base64url encoded header}.{Base64url encoded claim set}

签名似乎只是与声明相结合的标头,每个都单独进行 base64 编码。

如果您从示例中获取转储,则签名不是 JWT 标头和声明集的组合。

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.
ixOUGehweEVX_UKXv5BbbwVEdcz6AYS-6uQV6fGorGKrHf3LIJnyREw9evE-gs2bmMaQI5_UbabvI4k-mQE4kBqtmSpTzxYBL1TCd7Kv5nTZoUC1CmwmWCFqT9RE6D7XSgPUh_jF1qskLa2w0rxMSjwruNKbysgRNctZPln7cqQ
4

1 回答 1

0

您可以使用 Google Oauth 2.0 端点创建使用 Oauth 2.0 授权访问 Google API 的 Web 服务器应用程序。Oauth 2.0 服务器使用一次性授权代码将用户引导回您的应用程序。您的应用程序将此授权代码交换为访问令牌。

要在 RESTful 客户端服务器中发出身份验证请求,您必须在 HTTP 标头中放置一个令牌,以便对请求进行身份验证。这就是 OAuth 2.0 所做的。请参阅 RFC 6749

有关基于 JSON 和 REST 的客户端-服务器中的 RESTful 身份验证的一些详细信息,请参阅 本文。

生成令牌后,实际 API 调用不需要签名。OAuth 2.0 只有一个安全令牌,不需要签名。检查这个讨论签名的堆栈溢出票:OAuth 2 与 OAuth 1 有何不同?

于 2016-03-18T15:40:20.370 回答