当前位置: 首页 > 知识库问答 >
问题:

GCM http 401授权错误

长孙阳焱
2023-03-14

当我的后端服务器向GCM服务器发送post请求时,我得到一个授权错误HTTP 401。

我按照这里描述的步骤:

http://developer.android.com/google/gcm/http.html#auth_error

>> api_key=AIzaSyDEy3...

>> curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_id\":\"ABC\"}"

我明白了:

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>

在故障排除中它说:

Authentication Error
The sender account that you're trying to use to send a message couldn't be authenticated. Possible causes are:
    1. Authorization header missing or with invalid syntax.
    2. Invalid project number sent as key.
    3. Key valid but with GCM service disabled.
    4. Request originated from a server not whitelisted in the Server Key IPs.

我对此有疑问:

  1. curl请求中的头是否正确
  2. 它们是指“api_key”(AIzaSy…)还是项目编号,如8305134
  3. 如何将我的服务器密钥IP列入白名单
  4. 如果我正在运行curl命令,是否必须将计算机的IP地址列入白名单

共有3个答案

敖永丰
2023-03-14

我通过使用服务器密钥而不是API密钥解决了这个错误。您可以通过单击齿轮并单击项目设置从Firebase控制台获取服务器密钥,然后转到云消息标签并获取服务器密钥,普通服务器密钥和传统服务器密钥都可以工作。

这适用于Firebase和GCM,因此我们不需要分别声明两个密钥。

湛宏旷
2023-03-14

更新:

谷歌已经改变了控制台,现在你必须:

  • 去https://console.developers.google.com

不赞成

我也有同样的问题...然后我意识到我也必须为Android添加谷歌云消息。

  • 去https://cloud.google.com/console/project

希望它能帮助你!

解修然
2023-03-14

他们是指“api_key”(AIzaSy...)还是像8305134这样的项目号......?

这意味着应该在curl脚本中添加服务器密钥。项目编号不应用于在服务器端发送消息要创建新的服务器密钥,请按照以下步骤操作:,

  • 去https://cloud.google.com/console/project
  • 单击您的项目
  • 转到API

此密钥用于在服务器端发送脚本中的消息。

如何将我的服务器密钥IP列入白名单?

您可以在创建服务器密钥时列出白名单。

如果我正在运行curl命令,是否必须将计算机的IP地址列入白名单?

出于测试目的,您不必指定IP。出于商业目的,您可能需要。

警告:将IP设置为0.0。《入门指南》中提到的0.0/0将允许所有IPv4地址,但不允许IPv6。

 类似资料:
  • 问题内容: 我从Nexus存储库中检出了代码。我更改了帐户密码,并在文件中正确设置了密码。在执行时,我收到错误消息,说明它尝试从该存储库下载文件。 任何想法如何解决此错误?我在Maven 3.04中使用Windows 7 问题答案: 这里的问题是所使用的密码出现错字错误,由于密码中使用了字符/字母,因此很难识别。

  • 我试图通过Java Apachebeam MongoDbIO连接器连接到MongoDB,得到一个“未授权”错误。 同样的连接细节也适用于Python并能够检索数据。 “org.apache.beam.sdk.io.mongodbo.mongodbio$boundedmongodbsource.$closeresource(Mongodbio.java:407)位于org.apache.beam.s

  • 我正在用Java编写一个应用程序,该应用程序与SpotifyWebAPI配合使用,以获取当前播放的专辑的专辑插图(将来可能还有其他内容,因此范围很长)。根据Spotify的指南,我必须使用回调才能获得访问令牌。然而,在使用授权链接时,Spotify给了我以下非常有用且有深刻见解的错误消息。Spotify错误消息 我用来调用open a window的代码是 类似的问题也有人问过,他们的问题是他们的

  • 我的代码:GoogleCredential凭据 credential.refreshToken() 错误日志: 创建服务号的步骤: 我在凭据中的oauth 2.0中创建了一个Web应用程序 然后我用客户端ID创建了一个服务号 现在我正在使用这个服务号和从它生成的p12证书来验证和创建Google凭据的对象 一旦刷新令牌,我就给了我401例外。 在这种情况下,任何帮助都会受到感激

  • 我尝试设置Firebase身份验证,在localhost上它也起作用了。但是当我在Firebase上获得应用程序后,我会得到错误。 我已经在Firebase看过了,域是白名单。 我使用Google登录firebase的代码: 以下是完整的错误消息:

  • 我想更好地理解隐式授权流和授权代码授权流之间的区别,因为我不确定我目前的理解是否正确。 隐式授权流主要由前端应用程序用于验证用户身份吗? 隐式授权流是否只需要一个client_id、用户名和密码来进行身份验证,换句话说,永远不会发送client_secret? 授权码只是一个短期令牌吗? 将授权码交换为访问令牌后,客户端可以访问用户帐户多长时间?具体地说,如果客户端是一个长时间运行的脚本,那么用户