web-dev-qa-db-fra.com

Erreur d'autorisation GCM http 401

Lorsque mon serveur principal envoie des demandes de publication aux serveurs GCM, j'obtiens une erreur d'autorisation HTTP 401.

J'ai suivi les étapes décrites ici:

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\"}"

J'ai compris:

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

Dans le dépannage, il est dit:

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.

J'ai des questions à ce sujet:

  1. L'en-tête de la requête curl est-il correct?
  2. S'agit-il de "api_key" (AIzaSy…) ou du numéro de projet tel que 8305134…?
  3. Comment ajouter à la liste blanche l'adresse IP de la clé de serveur?
  4. Si j'exécute la commande curl, dois-je ajouter à la liste blanche l'adresse IP de mon ordinateur?
36
Pawel

S'agit-il de "api_key" (AIzaSy…) ou du numéro de projet tel que 8305134…?

Cela signifie clé de serveur qui devrait être ajoutée dans votre script curl. Le numéro de projet ne doit pas être utilisé pour envoyer un message côté serveur.

Pour créer la nouvelle clé de serveur, suivez les étapes,

  • Accédez à https://cloud.google.com/console/project
  • Cliquez sur votre projet
  • Accédez à APIs & auth dans le panneau de gauche.
  • Sélectionner les informations d'identification dans le sous-menu du panneau de gauche
  • Sous Accès à l'API publique, cliquez sur "Créer nouvelle clé".
  • Choisissez 'Serveur'
  • Dans la boîte de dialogue suivante, spécifiez les adresses IP de la liste blanche, le cas échéant. Laissant ce champ vide, les demandes proviendront de n’importe quel IP
  • Cliquez sur Créer.
  • Vous trouverez la nouvelle clé de serveur créée sous "Accès aux API publiques".

Cette clé doit être utilisée pour envoyer un message dans votre script côté serveur.

Comment ajouter à la liste blanche l'adresse IP de la clé de serveur?

Vous pouvez ajouter une liste blanche lors de la création de la clé de serveur.

Si j'exécute la commande curl, dois-je ajouter à la liste blanche l'adresse IP de mon ordinateur?

À des fins de test, vous n'avez pas à spécifier l'adresse IP. À des fins commerciales, vous voudrez peut-être.

Warning régler IP sur 0.0.0.0/0 comme indiqué dans le guide Mise en route autorisera toutes les adresses IPv4, mais pas IPv6.

28
Vijay C

METTRE À JOUR:

Google a changé de console, vous devez maintenant:

  • Accédez à https://console.developers.google.com
  • Sélectionnez votre projet (liste déroulante en haut)
  • Sélectionnez Vue d'ensemble dans le menu du panneau de gauche
  • Sélectionnez Google Cloud Messaging sous Mobile APIs title.
  • Cliquez sur le bouton Activer
  • Ensuite, vous devez créer les informations d'identification

OBSOL&EGRAVE;TE

J'ai eu le même problème ... alors j'ai réalisé que je devais aussi ajouter Google Cloud Messaging pour Android.

  • Accédez à https://cloud.google.com/console/project
  • Cliquez sur votre projet
  • Accédez à APIs & auth dans le panneau de gauche.
  • Sélectionnez APIs dans le sous-menu du panneau de gauche
  • Recherchez Google Cloud Messaging pour Android (ou/et Chrome) et activez-le.

J'espère que ça vous aide!

19

J'ai résolu cette erreur en utilisant la clé de serveur au lieu de la clé d'API. Vous pouvez obtenir la clé du serveur à partir de la console Firebase en cliquant sur l'engrenage, puis sur Paramètres du projet, puis cliquez sur l'onglet Cloud Messaging et obtenez la clé du serveur. La clé de serveur normale et la clé de serveur héritée fonctionnent.

Cela fonctionne à la fois sur Firebase et sur GCM. Il n'est donc pas nécessaire de déclarer deux clés séparément.

15
Tyson

Enfin trouvé mon problème 

J'ai créé l'en-tête d'autorisation HTTP comme ceci Authorization:[Api key]

Solution

Il me manquait 'key =' + [Votre clé Api] dans l'en-tête Authorization, 

donc l'en-tête HTTP complet sera 

Authorization:key=Apikey

11
sree

J'ai eu le même problème. J'utilisais la clé Android comme indiqué dans les instructions de http://developer.Android.com/google/gcm/gs.htmlServer Key pour être authentifié à partir de ma fenêtre Fiddler et de mon exemple PushSharp.

9
Vijay Vepakomma

Si vous avez récemment essayé de créer un nouveau projet dans GCM et d'ajouter une clé de serveur, l'autorisation échouera de toute façon car Google a cessé d'autoriser les clés de serveur nouvellement créées afin de promouvoir la messagerie Firebase Cloud. Actuellement, la seule option pour créer une nouvelle clé consiste à migrer d'abord le projet existant vers Firebase ici .

2
Pelister
  1. Je ne connais pas la syntaxe de la commande curl, mais il semble étrange que l'un des en-têtes que vous spécifiez soit --header "key: value" tandis que l'autre soit spécifié par --header key:"value". Peut-être que l'un d'entre eux est incorrect. De plus, vous devriez changer registration_id:ABC en "{\"registration_ids\":[\"ABC\"]}".

  2. Ils signifient la clé API.

  3. Si vous n'avez pas défini de liste d'adresses IP figurant sur la liste blanche lors de la création de votre clé d'API, celle-ci devrait figurer sur la liste blanche par défaut.

2
Eran

si erreur 401: le MCG doit être importé dans FCM pour fonctionner Les ID du serveur et de l'expéditeur sont disponibles à l'adresse https://console.firebase.google.com/project/my_projectID/settings/ cloudmessaging

2
Matoeil

J'ai eu le même problème. Ce que j'ai fait c'est:

  1. Effacer la liste blanche IP qui sera automatiquement définie sur Toutes les adresses IP.
  2. Régénérez la clé de serveur et utilisez la nouvelle clé générée.
2
ENSATE

Pour utiliser Firestore, vous devez utiliser la console Web API keyfirebase que vous pouvez trouver, que vous pouvez trouver à https://console.firebase.google.com/project/<yourProjectName>/settings/general/<yourAppPckageName>.

mais, pour utiliser Firebase pour envoyer une notification Push à vos clients de périphérique mobile, vous devez utiliser la console de développement Server key qui vous est fournie, que vous pouvez trouver à l'adresse https://console.developers.google.com/apis/credentials?project=<yourProjectName>

0
MajidJafari

Le problème est lié à l'autorisation, mais je suis tombé sur cette erreur en essayant de faire les choses à l'ancienne, je sais que c'est une vieille question, mais laissez-moi mettre mes 50 centimes dessus. Il y a tout d'abord un nouvel enfant en ville appelé "Firebase Cloud Messaging FCM". Permettez-moi de citer Google: 

FCM est la nouvelle version de GCM sous la marque Firebase. Il hérite L’infrastructure principale de GCM, avec de nouveaux kits de développement logiciel (SDK) pour créer la messagerie en nuage développement plus facile.

Les avantages de la mise à niveau vers FCM SDK incluent:

Développement client simplifié. Vous n'êtes plus obligé d'écrire votre propre logique d'inscription ou de nouvelle tentative d'inscription. Un out-of-the-box solution de notification. Vous pouvez utiliser les notifications Firebase, a solution de notifications sans serveur avec une console Web qui permet à quiconque envoyer des notifications à des publics spécifiques basés sur Firebase Informations analytiques . Plus d'informations sur FCMConfiguration pour Android studio

J'espère que cela aide quelqu'un qui essaie de faire les choses à l'ancienne

0
abdimuna

Un problème non autorisé surviendra en cas d'incompatibilité dans la clé d'API . Effacez la clé du serveur et régénérez-en une nouvelle. Utilisez la clé API du serveur dans le codage côté serveur. Et utiliser correctement l'identifiant de l'expéditeur dans le client Android

0
Jiju Induchoodan