OAuth2访问令牌通过rest/http



我正在尝试使用HTTP v1发送Firebase通知api。

google指南中描述的过程说明,我创建了一个service-account-file.json,然后将其与 google Auth Library一起使用

然而,我想知道是否有一种方法可以在不使用库的情况下做到这一点,通过POST/GET请求,问题是,我找不到一种方法来避免必须通过谷歌的oAuth-2.0同意页(获取授权码以便稍后交换访问和刷新令牌),这里提到。

是否有另一种方法只是通过使用生成的.json文件的内容,就像库一样?

p。S:我试着去查图书馆的电话,但没有任何运气

我相信您会希望使用JWT库为OAuth 2.0生成访问令牌,如firebase文档中使用凭据生成访问令牌所述。您可能希望使用库来生成访问令牌的原因是,为了进行授权的API调用,您需要使用RSA256之类的算法创建JWT并对其签名,以生成要发送到服务器的签名。这确保了在设定的持续时间内设置的请求仅由您的服务帐户创建,而不是由其他任意服务创建。

要为服务器端应用程序生成JWT请求,您需要请求(特别是对于fcm)您需要生成一个JWT请求,如下所示:

{
  "iss": ${YOUR_SERVICE_ACCOUNT_ID},
  "scope": "https://www.googleapis.com/auth/firebase.messaging",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385,
  "iat": 1328550785
}

关于索赔数据结构的解释可以在这里找到。

你会想要计算和编码签名使用UTF-8表示声明,像这样:{Base64url encoded header}.{Base64url encoded claim set} .

然后您想要获取该签名并使用它发出请求。格式如下所示:

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

,作为上面链接的站点的示例,您的特定请求看起来像这样:

{"alg":"RS256","typ":"JWT"}.
{
  "iss": ${YOUR_SERVICE_ACCOUNT_ID},
  "scope": "https://www.googleapis.com/auth/firebase.messaging",
  "aud": "https://oauth2.googleapis.com/token",
  "exp": 1328554385,
  "iat": 1328550785
}.
[signature bytes]

然后您将对该utf-8字符串进行base64编码,并将其发送到https://oauth2.googleapis.com/token,以使用grant_Type (urn:ietf:params:oauth:grant-type: JWT -bearer)和断言(您的base64编码的JWT从上面签名)的POST参数生成令牌。

这是大量的工作要手工完成,你需要知道RSA使用SHA-256哈希算法来生成这个(因为它是目前唯一支持的签名库),所以这就是为什么我相信谷歌推荐使用库,因为它为你做了这一切,而不需要重新实现RSA签名或导入其他签名库。您在上面的要点中链接的OAuth库用于用户OAuth,而不是机器或服务帐户OAuth,从而避免了Click to Authorize操作。服务帐户不能单击"授权",因此签名请求是生成OAuth凭据的有效方法,无需任意发出长时间请求并确保请求有效。很抱歉回复这么长时间,但是一旦我找到了服务帐户文档,我真的很感兴趣:)

最新更新