相关疑难解决方法(0)

GCM的API密钥突然无效?未经授权(401)错误

我为我的Android应用程序创建了一个用于GCM推送通知的Android API密钥.从过去两天开始,GCM服务器在PHP中返回Unauthorized(401)响应.

Android API密钥是否有任何原因无效/过期?或者GCM是否弃用了Android API密钥?

我还没有得到关于为什么Android API密钥无效的正确解释?他们中的大多数人更喜欢使用服务器密钥而不是GCM的Android API密钥,但没有提到为什么不使用Android API密钥.

为什么不在GCM中使用Android API Key?Android API密钥有任何限制吗?或者,如果通知消息超过每日限制,GCM服务器是否阻止通知/ GCM服务器使Android API密钥无效?

android firebase google-cloud-messaging firebase-cloud-messaging

25
推荐指数
1
解决办法
4万
查看次数

如何解决Android GCM 401错误?

尝试连接到Google Cloud Message Server时,我收到许多401 未经授权的错误.

我们的代码在我们的测试服务器上运行了一段时间,但在生产的代码上它有时会失败.

API密钥工作正常,推送通知到达(最终),但同时我收到很多401错误.

我在控制台上验证了服务器IP地址白名单上:

在关注Google Troublesooting指南时,我得到了惊人的结果:

me@myserver:~$ :curl --header "Authorization: key=AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFFU" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_ids\":[\"ABC\"]}"
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
me@myserver:~$ curl --header "Authorization: key=AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFFU" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_ids\":[\"ABC\"]}"
{"multicast_id":7560936933053964665,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}
me@myserver:~$ curl --header "Authorization: key=AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxFFU" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_ids\":[\"ABC\"]}"
<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

有时,相同的curl命令有效,有时它也没有任何改变,也没有在控制台或命令行中...有时它工作,我认为密钥没关系(我已经仔细检查了密钥和允许的IP几次).

我已经检查了所有stackoverflow问题并测试了所有建议,但即使从白名单中删除所有IP(以允许来自任何IP的请求)行为仍然是相同的,有时它有效地工作了一些时间它没有

我检查了一些参考文献: …

authentication google-api google-cloud-messaging

14
推荐指数
1
解决办法
7522
查看次数

在Google App Engine上启用Oauth2sso

我试图在我的应用程序中使用Google应用程序引擎获取spring security oauth2设置.一切似乎在本地工作正常,但当我部署到应用程序引擎时,事情开始崩溃.我通过谷歌进行身份验证后,将其转发给Whitelabel错误页面.在控制台中我看到这个错误:

http://my-application.appspot.com/login?state=t…m&session_state=8b67f5df659a8324430803973b9e1726e39fd454..1ae3&prompt=none 
401 (Unauthorized)
Run Code Online (Sandbox Code Playgroud)

我用这个application.yml文件设置我的auth:

security:
  oauth2:
client:
  clientId: client-key
  clientSecret: secret-key
  accessTokenUri: https://www.googleapis.com/oauth2/v4/token
  userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth
  clientAuthenticationScheme: form
  scope:
    - openid
    - email
    - profile
    - https://www.googleapis.com/auth/cloud-platform
resource:
  userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo
  preferTokenInfo: true
Run Code Online (Sandbox Code Playgroud)

我的安全配置看起来像这样:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
        .and()
            .authorizeRequests()
            .antMatchers("/static/**").permitAll()
            .antMatchers("/**").hasAuthority("ROLE_ADMIN")
            .anyRequest().authenticated()
        .and()
            .exceptionHandling()
            .accessDeniedPage("/403");
}
Run Code Online (Sandbox Code Playgroud)

我在google凭据页面上配置了Oauth ID,以允许授权的javascript来源:

http://my-application.appspot.com
https://my-application.appspot.com
http://localhost:8080
Run Code Online (Sandbox Code Playgroud)

并且授权的重定向URI为:

http://my-application.appspot.com/login
https://my-application.appspot.com/login
http://localhost:8080/login
Run Code Online (Sandbox Code Playgroud)

我部署到GAE后,为什么我可能会收到未经授权的错误?

谢谢,

克雷格

google-app-engine spring-security spring-boot spring-security-oauth2

5
推荐指数
1
解决办法
382
查看次数

使用PHP的GCM实现始终面临未授权错误401

我总是得到401错误.如果我正在使用我的本地服务器,任何人都可以让我确切地知道应该是什么HTTP引用者.即目前我正在使用:

    http://localhost/GCM/index.php 
Run Code Online (Sandbox Code Playgroud)

并使用它生成API访问密钥.

这是我的GCM请求的PHP代码.

                $key='mykey';
                $headers=array('Contenttype:application/json','Authorization:key='.$key);
                $url = 'https://android.googleapis.com/gcm/send';
                $ch = curl_init();
                $curlConfig = array(
                CURLOPT_URL            => $url,
                CURLOPT_POST           => true,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_POSTFIELDS     => json_encode(array('field1' => 'some date','field2' => 'some other data',)),
                CURLOPT_HTTPHEADER     => $headers,
                CURLOPT_SSL_VERIFYPEER => false,
                CURLOPT_SSL_VERIFYHOST => false,
                );
                curl_setopt_array($ch, $curlConfig);
                $result = curl_exec($ch);
                curl_close($ch);
                if($result==FALSE){
                    echo curl_error($ch);
                    echo curl_getinfo($ch);
                }else{
                    echo $result;
                }
Run Code Online (Sandbox Code Playgroud)

php android google-api push-notification google-cloud-messaging

3
推荐指数
1
解决办法
8278
查看次数