J'ai un client Android qui reçoit un jeton d'authentification de Google Play Services, en utilisant GoogleAuthUtil.getToken(Context context, Account account, String scope)
.
Il est ensuite envoyé à un serveur dorsal (Go), qui vérifie que le jeton a été signé par l'un des certificats de signature Google de https://www.googleapis.com/oauth2/v1/cert . Pour ce faire, il doit rechercher le certificat attribué au "kid" dans l'en-tête du jeton.
Dans 99% des cas, cela fonctionne parfaitement, mais il m'arrive régulièrement que le "kid" donné ne corresponde à aucun certificat Google publié, et que je ne puisse donc pas authentifier le jeton.
Edita:
J'ai mis en place un système de journalisation sur le serveur pour tenter de résoudre ce problème, et certaines relations méritent d'être signalées :
- Toute valeur invalide donnée
kid
n'est utilisé que pour un seul utilisateur. Je vois souvent plusieurs demandes sur plusieurs jours de la part d'un même utilisateur avec une invalidité donnée.kid
mais uniquement de la part de cet utilisateur. - Un utilisateur qui donne un
kid
n'utilise jamais unkid
pour toute demande, ou toute autrekid
pour une demande, même si elles sont espacées de plusieurs jours. Il semble que Google renouvelle ses certificats toutes les 24 heures environ. - De nombreux utilisateurs se servent d'anciennes versions du client. La plupart des utilisateurs procèdent à une mise à niveau dans un délai d'un jour ou deux après la publication d'une nouvelle version, mais la majorité des utilisateurs dont les clés de certificat ne sont pas valides utilisent des versions vieilles de quelques semaines.
- Les demandes proviennent d'un peu partout dans le monde, à l'image de notre base d'utilisateurs.
- Les demandes proviennent d'un grand nombre de fois, ce qui correspond à notre base d'utilisateurs.
- Les demandes proviennent de toute une série d'appareils, de fabricants et de modèles.
Je pense qu'il s'agit probablement d'utilisateurs qui ont téléchargé l'APK depuis un site autre que Google Play, mais je n'ai aucun moyen de le vérifier pour l'instant.
Edit : Il y a un gestionnaire de problème pour cela, mais il semble qu'il ait été marqué comme une faible priorité. Si quelqu'un a ce problème, merci de le faire savoir sur le tracker. https://issuetracker.google.com/issues/37734997
0 votes
Vous pouvez vérifier comment votre code enregistre l'identifiant sur le serveur. Vous pouvez également consulter ce document - S'authentifier auprès d'un serveur dorsal Cela permet d'éviter d'envoyer le tokenID au serveur pour en vérifier l'intégrité. J'espère que cela vous aidera.
0 votes
@Mr.Rebot S'il s'agissait d'une erreur du client, elle devrait affecter l'ensemble du jeton, mais tout ce que je vois, c'est un jeton bien formé avec un "kid" qui ne correspond à aucune clé de certificat de signature Google publiée.
0 votes
De nombreux téléphones Android (en particulier dans les pays d'Asie de l'Est) n'ont pas de Play Store ou de Google Play Services. Est-il possible que ces utilisateurs ne reçoivent pas les jetons d'authentification appropriés ? Cela confirme votre idée que ces utilisateurs n'ont pas téléchargé l'APK à partir du Play Store.
0 votes
Vous pouvez authentifier le jeton en l'utilisant à bon escient. Votre application fait-elle quelque chose d'illégal ?
1 votes
@danny117 Je crains de ne pas comprendre ce que vous voulez dire. La grande majorité du temps, le token qui nous est envoyé est valide. Dans moins de 1% des cas, nous recevons un jeton qui a été signé par un certificat qui ne figure pas sur la liste des certificats de signature de Google, et qui est donc invalide. Notre application est sur Google Play, elle est donc tout à fait légale, et même si ce n'était pas le cas, cela n'affecterait pas le certificat utilisé par Google Play Services pour signer le jeton.
0 votes
@DoronYakovlev-Golani Notre application vérifie d'abord qu'une version compatible de Google Play Services est présente, puis demande le jeton à Google Play Services. Si Google Play Services n'est pas présent, l'application affiche une erreur et n'essaie pas de faire la demande. L'absence de Google Play Services ne devrait donc pas avoir d'incidence sur ce processus, à moins qu'il n'existe une version falsifiée de Google Play Services sur ces appareils.
0 votes
Au moins avec Firebase, la "révocation du jeton d'identification" est possible.
0 votes
Le chiffre 2 me fait penser que quelqu'un a désossé votre application et l'a déployée sur un autre magasin.