首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过rest/http访问OAuth2令牌

通过rest/http访问OAuth2令牌
EN

Stack Overflow用户
提问于 2022-11-07 04:22:21
回答 1查看 67关注 0票数 0

我试图使用HTTP v1 api发送Firebase通知。

在谷歌指南中所描述的过程是,我创建了一个service-account-file.json,并在Google 中使用它,它确实有效。

但是,我想知道是否有一种不使用库的方法,通过POST/GET请求,问题是,我无法找到一种方法来避免通过谷歌的oAuth-2.0同意页面(以获得授权代码以稍后交换访问和刷新令牌),提到了这里

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

P.S .我试图挖掘图书馆的电话,没有任何运气

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-07 19:36:57

我相信您会希望使用JWT库为OAuth 2.0生成一个访问令牌,如使用凭据来访问令牌上的firebase文档所述。您可能希望使用库来创建访问令牌的原因是,为了实现发出授权的API调用,您需要使用像RSA256这样的算法来创建和签名一个JWT,以生成要发送到服务器的签名。这将确保所设置的请求仅由服务帐户创建,而不是由其他任意服务创建。

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

代码语言:javascript
复制
{
  "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}

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

代码语言:javascript
复制
{Base64url encoded header}.
{Base64url encoded claim set}.
{Base64url encoded signature}

作为上面链接的站点的一个例子,您的具体请求如下所示:

代码语言:javascript
复制
{"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凭据,而无需任意地发出长期存在的请求并确保有效的请求。很抱歉收到了冗长的回复,但一旦我找到了服务帐户文档,我就非常感兴趣:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74341945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档