我试图使用HTTP v1 api发送Firebase通知。
在谷歌指南中所描述的过程是,我创建了一个service-account-file.json,并在Google 中使用它,它确实有效。
但是,我想知道是否有一种不使用库的方法,通过POST/GET请求,问题是,我无法找到一种方法来避免通过谷歌的oAuth-2.0同意页面(以获得授权代码以稍后交换访问和刷新令牌),提到了这里。
还有另一种方法,就像库一样,只使用生成的.json文件的内容吗?
P.S .我试图挖掘图书馆的电话,没有任何运气
发布于 2022-11-07 19:36:57
我相信您会希望使用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]然后,base64对这个utf-8字符串进行编码,并将其发送到https://oauth2.googleapis.com/token,以便使用grant_Type的POST参数(urn:ietf:params:oauth:grant-type:JWT-承载)和断言(您的base64从上面用签名对JWT进行编码)来创建令牌。
这需要手工完成很多工作,您需要知道RSA使用SHA-256散列算法来生成这个(作为它目前唯一支持的签名库),所以我认为这就是为什么Google建议使用这个库,因为它为您做了所有这一切,而不需要重新实现RSA签名或导入其他签名库。您在上面的gist中链接的OAuth库是针对用户OAuth的,而不是针对避免Click to Authorize操作的机器或服务帐户OAuth。服务帐户无法单击授权,因此签名请求是一种有效的方法,可以生成OAuth凭据,而无需任意地发出长期存在的请求并确保有效的请求。很抱歉收到了冗长的回复,但一旦我找到了服务帐户文档,我就非常感兴趣:)
https://stackoverflow.com/questions/74341945
复制相似问题