Guía de autenticación del SDK para TypeScript de Frame.io
Guía de autenticación del SDK para TypeScript de Frame.io
Esta guía explica cómo autenticarse con la API de Frame.io mediante el SDK para TypeScript de Frame.io (frameio). La API V4 de Frame.io usa Adobe Identity Management Service (IMS), la plataforma de identidad OAuth 2.0 de Adobe. Esta es una referencia independiente para desarrolladores de TypeScript/JavaScript. Todos los ejemplos de código y flujos que aparecen a continuación son solo para el paquete frameio.
Tipos de autenticación en el SDK de TypeScript
El SDK de TypeScript admite cuatro clases de autenticación OAuth, además del uso directo de tokens:
Usuarios de cuenta de servicio
Cuando se usa la autenticación de servidor a servidor, la aplicación actúa como usuario de cuenta de servicio, un tipo de cuenta independiente que puede realizar acciones en nombre del servicio. Estos usuarios son visibles para otros usuarios en Frame.io: cuando una cuenta de servicio realiza una acción, su nombre se muestra en la IU. Puede conceder y revocar el acceso de cuentas de servicio mediante Adobe Admin Console y Developer Console. Los nombres de las cuentas de servicio se gestionan desde la IU de Frame.io. De forma predeterminada, la primera conexión S2S se denomina Service Account User, la segunda Service Account User 2, y así sucesivamente.
Consulte Automatización de la configuración con compatibilidad de servidor a servidor de Frame.io para obtener más información.
Inicio rápido
Requisitos previos
- Credenciales de Adobe Developer Console:
- ID de cliente: Obligatorio para todos los flujos Oauth. - Secreto de cliente: Obligatorio para los flujos de servidor a servidor y Web App. - URI de redireccionamiento: Obligatorio para los flujos Web App, SPA y Native App; debe estar registrado en el proyecto de Adobe.
- Instale el SDK:
Elección de un método
- ¿No interviene ningún usuario? Use Server-to-Server (
ServerToServerAuth). - ¿Interviene un usuario y puede almacenar un secreto? Use Web App (
WebAppAuth). - ¿Interviene un usuario, pero no puede almacenar un secreto? Use SPA (
SPAAuth) para aplicaciones de explorador o Native App (NativeAppAuth) para aplicaciones de escritorio o móviles.
Token de acceso
Si ya dispone de un token de acceso, procedente de otro sistema OAuth o de un intercambio anterior, por ejemplo, mediante nuestro API Explorer, puede pasarlo directamente:
Este es el enfoque más sencillo, pero el token caducará en algún momento y el SDK no lo actualizará automáticamente.
Tokens de desarrollador heredados
En el caso de las cuentas migradas a V4 que aún no se administran mediante Adobe Admin Console, puede seguir usando tokens de desarrollador heredados del sitio para desarrolladores de Frame.io. Debe incluir el encabezado x-frameio-legacy-token-auth y establecerlo en true:
Los tokens de desarrollador heredados no caducan, pero son un mecanismo de transición. Para integraciones nuevas y cargas de trabajo de producción, recomendamos usar uno de los flujos OAuth 2.0 que se indican a continuación. Consulte la Guía de migración para obtener más información.
Servidor a servidor (credenciales de cliente)
Use este método para servicios backend y scripts que necesiten acceso a Frame.io sin interacción del usuario. Este flujo solo está disponible para cuentas de Frame.io V4 administradas mediante Adobe Admin Console. La aplicación se autentica como usuario de cuenta de servicio sin intervención humana.
Eso es todo. auth.getToken() es una función asíncrona que el SDK invoca en cada solicitud. Si el token actual sigue siendo válido, se devuelve inmediatamente. Si está a punto de caducar, primero se obtiene uno nuevo de forma totalmente transparente.
Funcionamiento
Las credenciales de cliente, es decir, el ID de cliente y el secreto, nunca caducan. Solo se rotan manualmente por motivos de seguridad. S2S proporciona acceso a la API prácticamente permanente e ininterrumpido, sin intervención manual.
En segundo plano:
- En la primera llamada de API,
getToken()solicita un nuevo token de acceso a Adobe IMS mediante la concesiónclient_credentials. - El token se almacena en caché en memoria. Los tokens de acceso individuales caducan (normalmente en 24 horas), pero el SDK se encarga de gestionarlo.
- Cuando un token almacenado en caché se encuentra dentro del búfer de actualización, cuyo valor predeterminado es 60 segundos antes de la caducidad, el SDK obtiene automáticamente uno nuevo con las mismas credenciales de cliente.
- No intervienen tokens de actualización. Las propias credenciales de cliente son el secreto de larga duración y siempre se pueden usar para emitir un nuevo token de acceso.
Autenticación explícita
Si desea obtener el token de forma anticipada (por ejemplo, para detectar rápidamente credenciales incorrectas al iniciar):
Web App (código de autorización)
Use este método para aplicaciones del lado del servidor en las que los usuarios inician sesión con su Adobe ID. Este flujo requiere un secreto de cliente, que debe almacenarse de forma segura en el servidor.
Gestión de la devolución de llamada
Cuando Adobe IMS redirija al usuario de vuelta a redirectUri, extraiga los parámetros code y state. Verifique que state coincida con el valor almacenado y, a continuación, intercambie code por tokens:
Esto intercambia el código de autorización por un token de acceso y un token de actualización, y almacena ambos internamente.
Ejemplo completo de Express
Single Page App/PKCE (código de autorización + PKCE)
Use este método para aplicaciones basadas en explorador, aplicaciones de escritorio o herramientas de CLI que no puedan almacenar de forma segura un secreto de cliente. Este flujo usa PKCE (RFC 7636) para proteger el intercambio del código de autorización.
codeVerifier debe almacenarse de forma segura en el lado del cliente entre la solicitud de autorización y el intercambio de código. Use sessionStorage o un equivalente en aplicaciones de explorador.
Native App (código de autorización + PKCE)
Use este método para aplicaciones de escritorio y móviles. Al crear una credencial de Native App en Adobe Developer Console, Adobe asigna un URI de redireccionamiento con el formato adobe+<hash>://callback</hash>; debe registrar la aplicación para gestionar ese esquema de URI personalizado en el sistema operativo. También se admiten redireccionamientos de bucle invertido, como (http://127.0.0.1:<port>/callback</port>) para desarrollo local. El flujo es idéntico al de SPA: usa PKCE sin secreto de cliente.
Reglas de URI de redireccionamiento
Adobe aplica las reglas de URI de redireccionamiento en dos puntos: al registrar la credencial en Adobe Developer Console y cuando el parámetro redirect_uri llega al punto final /authorize/v2. El valor que se pase a redirectUri en este SDK debe coincidir con uno de los Redirect URI patterns registrados en la credencial; de lo contrario, Adobe redirige al Default Redirect URI de la credencial.
- Las credenciales de Web App y SPA requieren HTTPS.
- Las credenciales de Native App usan un redireccionamiento que no es HTTPS, normalmente el URI
adobe+<hash>://callback</hash>mostrado en Developer Console para la credencial.
Consulte Adobe Developer Console para ver los patrones exactos que acepta la credencial.
El SDK para Python no incluye una clase de credencial de Native App, ya que Python no dispone de una forma estándar de registrar controladores de esquemas de
URI personalizados. El SDK para TypeScript admite los cuatro tipos de credencial, incluida Native App.
Actualización manual de tokens
En los flujos Web App, SPA y Native App, el SDK actualiza los tokens automáticamente mediante getToken(). Si necesita control explícito, puede llamar directamente a refresh():
Esto resulta útil si desea forzar una actualización antes de una operación crítica en lugar de depender del búfer de actualización automático.
refresh() está disponible en WebAppAuth, SPAAuth y NativeAppAuth. Genera ConfigurationError si no hay ningún token de actualización disponible, es decir, primero debe llamar a exchangeCode(). ServerToServerAuth no tiene ningún método refresh(): utiliza authenticate() para obtener un token nuevo mediante credenciales de cliente.
Persistencia de tokens
Todas las clases de autenticación admiten exportTokens() e importTokens() para conservar el estado de los tokens entre reinicios. En los flujos Web App, SPA y Native App, esto es especialmente importante, ya que los tokens de acceso y de actualización se almacenan en memoria de forma predeterminada. Si la aplicación se reinicia, los usuarios tendrían que volver a autenticarse a menos que los tokens se conserven. En Server-to-Server, la persistencia es opcional, ya que las credenciales de cliente siempre pueden emitir un token nuevo, pero importar un token almacenado en caché evita un recorrido adicional al iniciar.
Exportación e importación
Almacene los tokens exportados de forma segura. Contienen tokens de acceso y actualización que conceden acceso a la API. Evite escribir tokens
en archivos de texto sin formato en producción.
Persistencia automática con onTokenRefreshed
Para conservar los tokens automáticamente cada vez que se actualicen, use la devolución de llamada onTokenRefreshed:
La devolución de llamada recibe la misma estructura que exportTokens() y se activa después de cada actualización correcta del token.
Revocación de tokens
Para cerrar la sesión de un usuario e invalidar sus tokens con Adobe IMS:
Esto realiza dos solicitudes de revocación a Adobe IMS con el máximo esfuerzo: una para el token de acceso y otra para el token de actualización (en paralelo), y borra todo el estado local de los tokens. En clientes confidenciales (WebAppAuth), las solicitudes de revocación usan HTTP Basic Auth. En clientes públicos (SPAAuth, NativeAppAuth), client_id se envía como parámetro de consulta. Los errores de revocación se registran, pero no se generan. Después de la revocación, el usuario tendrá que volver a autenticarse.
Gestión de errores
Todos los errores de autenticación heredan de FrameioAuthError, por lo que puede capturarlos de forma general o gestionar casos específicos:
Referencia de errores
Gestión de tokens de actualización caducados en producción
En los flujos Web App, SPA y Native App, el token de actualización acabará caducando. Cuando esto ocurra, getToken() generará TokenExpiredError. Debe capturarlo y redirigir al usuario de nuevo a través del flujo de autorización.
Referencia de configuración
Estos parámetros tienen valores predeterminados razonables y rara vez es necesario configurarlos. Si necesita personalizar el comportamiento, como apuntar a un IMS de ensayo, inyectar un fetch personalizado, ajustar los tiempos de espera o conectar un registrador, pase cualquiera de ellos como parámetro opcional al construir la clase de autenticación:
Entornos de ensayo
Apunte a una instancia de ensayo de Adobe IMS sobrescribiendo imsBaseUrl. El SDK también exporta DEFAULT_IMS_BASE_URL (https://ims-na1.adobelogin.com) por si necesita hacer referencia al valor de producción mediante programación.
Fetch personalizado
Para compatibilidad con proxy o configuración de TLS personalizada:
Seguridad de concurrencia
El SDK para TypeScript es seguro para el uso concurrente. Cuando se producen varias llamadas simultáneas a getToken() y se necesita una actualización, solo se envía una solicitud de actualización. Las demás esperan a la misma promesa y reciben el mismo resultado. No se requiere ningún bloqueo externo. Esta deduplicación utiliza el bucle de eventos de un solo subproceso de JavaScript y una Promise compartida: si ya hay una actualización en curso, los llamadores concurrentes se unen a ella en lugar de iniciar una segunda solicitud. Si se llama a revoke() mientras hay una actualización en curso, la actualización se rechaza con un AuthenticationError y los tokens permanecen borrados; la revocación siempre tiene prioridad.