Propiedades de los identificadores compartidos de proveedores de Google

Información general

En este documento, se describen las propiedades obligatorias para los identificadores compartidos que se usan en las integraciones entre Google y un proveedor (o la entidad emisora de la cuenta al usuario). Una buena manera de considerar un identificador compartido es que es un puntero opaco que apunta a una arista entre una Cuenta de Google y una cuenta de la entidad emisora.

Por lo tanto, es importante recordar que el identificador compartido no se refiere a la Cuenta de Google (o al usuario o a otra entidad en el almacenamiento de Google) ni a la cuenta del proveedor o emisor (ni a otra entidad). Se refiere al vínculo entre estos dos.

Propiedades del identificador compartido

Las propiedades que se requieren de los identificadores compartidos surgen de la experiencia pasada y de problemas técnicos que se encontraron como resultado de la falta de estas propiedades en los identificadores compartidos.

Para una integración entre Google y un socio externo, es fundamental que los identificadores compartidos que se usan tengan las siguientes propiedades:

  1. Debe ser único a nivel global: Este identificador compartido debe apuntar a exactamente un vínculo entre un usuario de Google y una cuenta de la entidad emisora. No debe haber otro identificador compartido para el mismo emisor que tenga el mismo valor.
  2. No deben ser fáciles de adivinar: Estos identificadores compartidos tienen permiso para realizar acciones en nombre del usuario, por lo que es importante que un tercero no pueda adivinar el valor del identificador compartido.
  3. Se puede revocar: Es importante que el usuario pueda revocar un identificador compartido, y esta revocación debe prohibir el uso futuro del valor del identificador compartido. Esta propiedad tiene algunas propiedades complementarias:
    • No basado en una propiedad inmutable de ninguna de las cuentas: Si el valor del identificador compartido se basara en una propiedad inmutable de la cuenta de la entidad emisora o de la Cuenta de Google, la recreación de un identificador compartido revocado daría como resultado el mismo valor de ese identificador compartido (y deshace la revocación), por lo que el valor del identificador compartido no debe ser una propiedad de la cuenta (p.ej., no debe ser un número de teléfono).
    • No ser solo <Cuenta de Google, Cuenta de socio>: Debe haber algún otro valor (p.ej., la hora) para permitir la revocación.
  4. Permitir varios vínculos para la cuenta en ambos lados: Es importante que la creación del valor de identificador compartido no imposibilite que un solo usuario de Google vincule varias cuentas bancarias o que más de una Cuenta de Google vincule a una sola cuenta bancaria (p.ej., una cuenta principal y una secundaria vinculadas a la cuenta bancaria principal). De manera similar a la revocabilidad, esto tiene algunos corolarios:
    • Una vez más, no se basa en una propiedad inmutable de ninguna de las cuentas: De lo contrario, el identificador compartido tendría el mismo valor cuando un solo usuario de Google vincule varias cuentas bancarias (si el valor del identificador compartido se basara en la Cuenta de Google) o si varias Cuentas de Google están vinculadas con una sola cuenta bancaria (si el valor del identificador compartido se basara en una propiedad de la cuenta bancaria).
  5. Es de larga duración: El identificador compartido solo es válido en un contexto seguro (la integración entre Google y el proveedor, que usa protecciones a nivel de conexión y a nivel de la aplicación (p. ej., PGP, SSL mutua, etc.), por lo que no necesita ciclos de vida cortos para mantenerse seguro). Google prefiere que los identificadores compartidos nunca venzan, pero si un proveedor requiere vencimiento, debe ser un período prolongado (p.ej., más de 1 año).

Estas son otras propiedades del identificador compartido que se recomiendan:

  1. Base64: facilita el transporte y la comunicación del valor de la integración a través de HTTPS.
  2. Longitud mínima: Se recomienda un mínimo de 27 dígitos (antes de la codificación en Base64) para garantizar que haya suficiente espacio de direcciones y evitar colisiones.

¿Qué cosas pueden salir mal?

Para ayudar al lector a comprender las propiedades requeridas, estos son algunos casos de éxito que ilustran los problemas que se encuentran cuando no se cumplen estas propiedades.

Casos de éxito de identificadores compartidos

Caso de éxito n.o 1: Reciclaje de números de teléfono

Una entidad emisora que usó el número de teléfono del usuario como identificador compartido Cuando el usuario A cambió de plan de teléfono, abandonó su número de teléfono y obtuvo uno nuevo. Un mes después, la empresa telefónica reciclaba el número de teléfono anterior y, de repente, el nuevo propietario del número, el usuario B, comenzó a ver cargos en su cuenta por cosas que no compraba.

La entidad emisora había infringido varias propiedades del identificador compartido, principalmente la propiedad n.o 1. Elementos como los números de teléfono pueden migrar de un usuario a otro, por lo que solo son únicos durante una instantánea en particular en el tiempo.

Caso práctico n.o 2: The Paste

Un empleado de Google o socio pega accidentalmente un identificador compartido en un chat en lugar de una herramienta interna. Las capas adicionales de protección impiden que cualquier persona use el identificador compartido de forma malintencionada, pero, para garantizar la seguridad, Google quería revocar el identificador compartido y reemplazarlo por uno nuevo. Cuando Google o el socio intentan revocar el identificador compartido, descubren que los identificadores compartidos son solo el ID de la cuenta del usuario en el sistema de la entidad emisora y que el identificador compartido se usa para buscar directamente la cuenta del usuario. Por lo tanto, no se pudo revocar el identificador compartido sin borrar la cuenta del usuario y crear una nueva para él.

Caso práctico n.o 3: El mal empleado

Después del incidente "The Paste" anterior, una persona que actúa de mala fe dentro de Google o socio se da cuenta de que, como el identificador compartido es solo el ID de la cuenta del usuario, si puede colocar el ID de la cuenta de otra persona en su propio valor de identificador compartido, puede realizar compras con la cuenta de esa persona. El incumplimiento de la Propiedad 2 hizo que este pegado involuntario sea más que un espacio de seguridad para un solo usuario: es un espacio de seguridad para todos los usuarios.

Caso de éxito n.o 4: The Rotation

Después del incidente de “Pegar” anterior, el emisor cambia a un UUID como su formato de identificador compartido. Esta vez, un empleado de la entidad emisora envía, por error, algunos de los identificadores compartidos en texto simple como parte de una conversación de correo electrónico de depuración. Google afirma que no hay problema, solo revocaremos y reemplazaremos los identificadores compartidos del usuario.

Como parte de la rotación, Google le informa a la entidad emisora que cada cuenta de usuario vulnerada tendrá dos identificadores compartidos activos durante un período breve mientras se lleva a cabo la limpieza de la base de datos. Sin embargo, la entidad emisora no permitió la propiedad n.o 4 y le informa a Google que tiene una restricción de que solo un identificador compartido puede estar activo para una cuenta de usuario en particular. Esto genera una rotación muy desordenada con condiciones de carrera.