Servicios de reproducción de Google que devuelven un token firmado con una clave distinta de Google

Tengo un cliente de Android obteniendo un token de autenticación de Google Play Services, utilizando GoogleAuthUtil.getToken(Context context, Account account, String scope) .

Esto se envía a un servidor backend (Go), que comprueba que el token fue firmado por uno de los certificados de firma de Google de https://www.googleapis.com/oauth2/v1/cert . Para ello, debe buscar el certificado asignado al "chico" en el encabezado de token.

99% del tiempo, esto funciona muy bien, pero tengo situaciones regulares donde el "chico" dado no corresponde a ningún certificado publicado de Google, y por lo tanto no puedo autenticar el token.

Editar:

He añadido amplia registro en el servidor para tratar de rastrear esto, y hay algunas relaciones que vale la pena anotar:

  1. Cualquier kid no válido dado se utiliza solamente para un solo usuario. A menudo veo varias solicitudes durante varios días desde el mismo usuario con un determinado inválido, pero sólo desde ese usuario.
  2. Un usuario que da a un kid inválido nunca utiliza un kid válido para cualquier solicitud, o cualquier otro kid para una solicitud, incluso si son días de diferencia. Afaik Google cicla sus certificados cada 24 horas aproximadamente.
  3. Muchos usuarios utilizan versiones de cliente más antiguas. La mayoría de los usuarios se actualizan dentro de un día o dos de una versión nueva que se está publicando, pero la mayoría de los usuarios con claves de certificado no válidas utilizan versiones que tienen algunas semanas de antigüedad.
  4. Las solicitudes vienen de una propagación uniforme en todo el mundo en línea con nuestra base de usuarios.
  5. Las solicitudes vienen de una extensión de veces, en línea con nuestra base de usuarios.
  6. Las solicitudes vienen de una gama de dispositivos, fabricantes y modelos.

Mi opinión actual es que es probablemente de usuarios que han descargado el APK de un sitio distinto de Google Play, pero no tengo forma de verificarlo ahora mismo.

  • ¿Por qué no puedo crear varios ID de cliente de OAuth 2.0 para el mismo nombre de paquete?
  • App Invites for Android: Error al enviar el mensaje con el ID de cliente del contenedor que falta
  • La compra en la aplicación utiliza una cuenta incorrecta después de la actualización
  • Iniciar sesión en Google Drive en Android sin agregar la cuenta de Google al dispositivo
  • La aplicación de Google Play Store con la unidad de Google sdk muestra siempre la opción "Elegir cuenta"
  • Configuración de Google Play Games Services
  • No se pueden usar los servicios de Google Play en el complemento de java de unidad
  • Importar la biblioteca de Google Play Services en Android Studio
  • Demasiado nueva versión para Android google play
  • Después de actualizar a los servicios de Google Play 8.4.0 mi aplicación se bloquea al iniciar
  • ¿Cuándo utilizar el permiso READ_GSERVICES?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.