Cómo autorizar una app sobre una cuenta de AppBO: el intercambio inicial, la renovación de tokens, la gestión de alcances y el manejo de revocaciones.
Trae tus herramientas a una llamada: lo conectamos, probamos cada campo en ambas direcciones y te lo entregamos documentado.
Agenda una llamadaOAuth es el intercambio que permite que una aplicación actúe sobre una cuenta de AppBO sin tener nunca la contraseña del dueño de la cuenta. De un lado está tu aplicación: registrada una sola vez, con un identificador de cliente y un secreto de cliente. Del otro está el dueño de la cuenta o el administrador de la agencia, que pasa por una pantalla de consentimiento y le otorga a tu app un conjunto definido de permisos sobre una cuenta específica. Lo que vuelve es un token de acceso de corta duración, un token de renovación de duración más larga y un registro de exactamente qué cuenta y qué alcances cubre la autorización.
Esto se conecta siempre que más de una cuenta vaya a usar tu integración, o siempre que lo que se conecta sea un producto y no un script de una sola vez. Una sola clave privada escrita directamente en una tarea programada (cron) sirve para tu propia cuenta; deja de funcionar en cuanto un segundo cliente la necesita, porque le estarías pidiendo a ese cliente que entregue credenciales que no se pueden limitar ni revocar de forma independiente.
Vale la pena distinguir dos formas de autorización. Una autorización de subcuenta (ubicación) autoriza a tu app sobre los datos de una sola cuenta. Una autorización de agencia autoriza a tu app a nivel superior, y después puede obtener tokens para las cuentas que dependen de ella. Las autorizaciones de agencia son el modelo correcto para un producto que atiende a toda la cartera de clientes de una agencia; también son las que más fácilmente quedan con alcances mal definidos, porque los permisos son más amplios y el radio de daño de un token filtrado son todos los clientes de esa agencia.
state que generaste y guardaste asociado a la sesión del usuario.state que vuelve coincida con el que guardaste y después descártalo. Saltarse esta verificación es lo que hace que un flujo sea vulnerable a la falsificación de solicitudes.403 que indique un alcance que creías tener.state.state.Escenario: una agencia instala tu producto de reportes una sola vez a nivel superior, y después tu producto lee los datos de oportunidades de cinco subcuentas de clientes.
state aleatorio, lo guarda asociado a su sesión y lo redirige a la URL de autorización de la plataforma con tu id de cliente, tus alcances de nivel agencia y tu URI de redirección.state.state que volvió con el que guardó, confirma que coinciden y lo borra.403 en un endpoint de pipelines, lo que te dice que ese alcance nunca se otorgó; marcas esa cuenta en la interfaz con un aviso de Reconectar para activar en lugar de publicar en silencio un reporte incompleto.Los endpoints de tokens tienen límites de uso como cualquier otro, y un error que renueva en cada llamada a la API en lugar de hacerlo con un temporizador va a alcanzar ese límite y tumbar toda tu integración. Renueva una vez por instalación en cada ventana, detrás de un bloqueo. Las llamadas a la API que se hacen con el token resultante cuentan contra el presupuesto normal de API de la cuenta, así que una app de nivel agencia que atiende muchas cuentas debe repartir el trabajo a lo largo de la ventana en lugar de lanzar la sincronización de todas las cuentas a medianoche.
Los códigos de autorización son de un solo uso. Reintentar un intercambio fallido con el mismo código falla, y si el primer intento en realidad funcionó acabas de tirar un par de tokens válido, así que guarda los tokens antes de devolverle una respuesta al navegador. Los tokens de renovación suelen rotar al usarse: si reintentas una renovación con el token anterior después de una rotación exitosa, te van a decir que la autorización es inválida, lo que se ve exactamente igual que una revocación. Haz que la renovación sea atómica y guarda antes de reutilizar.
Los identificadores de los alcances son cadenas literales y no son intercambiables con los nombres de los endpoints. Lectura y escritura son alcances distintos para el mismo recurso. Guarda la lista de alcances otorgados y compárala en el código, para que un permiso faltante aparezca como un error claro en tus propios registros y no como un 403 opaco en producción.
Nada impide que la misma cuenta se autorice dos veces: un usuario vuelve a hacer clic en Conectar, o dos miembros del equipo conectan cada uno por su lado. Usa el identificador de la cuenta como clave de tus registros de instalación y trata una segunda autorización como un reemplazo, o vas a correr dos sincronizaciones contra una misma cuenta y crear registros por duplicado.
Usa un registro de app distinto por entorno, con su propio secreto de cliente y su propia URI de redirección. Apuntar una app de staging a una cuenta de producción es como los datos de prueba terminan en el pipeline de un cliente, y compartir un mismo registro entre entornos significa que no puedes revocar uno sin romper el otro.
Los tokens de acceso vencen en minutos u horas; los tokens de renovación duran más, pero no son permanentes. Una autorización muere cuando el usuario desconecta la app, cuando un administrador quita la instalación, cuando se cierra la cuenta o cuando la plataforma la invalida. Distingue un 401 (el token venció, renuévalo) de un error de autorización inválida al renovar (la autorización ya no existe, pídele a una persona que vuelva a conectar). Quedarse en un ciclo con el segundo caso es la falla más común en producción.
state sin validar, o validado contra una cookie que se perdió en una redirección entre sitios.Conectamos la integración, mapeamos los campos, probamos ambas direcciones y te la entregamos con los procedimientos (SOP) que tu equipo necesita para operarla.
Agenda una llamada