Requerir conexiones autorizadas
La clave de app es pública. Cualquiera que pueda cargar tu página puede usarla para abrir una conexión y suscribirse a canales públicos.
Las conexiones autorizadas requieren que cada nueva conexión demuestre estar autorizada en un plazo de 30 segundos. El edge de Realtime cierra las conexiones que no se autorizan a tiempo.
Requerir conexiones autorizadas
Activa Authorized connections para la app en la página de Realtime apps. También puedes establecer authorized_connections en true a través de la API de Realtime. El ajuste se aplica a cada conexión que use una de las claves de la app.
Actualiza los clientes para que se autoricen antes de activar el ajuste en producción. Las conexiones establecidas antes de activarlo permanecen abiertas, pero las conexiones posteriores de clientes más antiguos fallan tras el tiempo de espera de autorización.
Qué cuenta como autorizado
Una conexión nueva comienza no autorizada. Cualquiera de estas acciones la autoriza:
- Una suscripción privada o de presencia tiene éxito. El cliente envía el ID de conexión a tu authEndpoint, tu backend lo firma y el edge verifica la firma. Consulta Autorización de canales.
- signin() tiene éxito. El cliente envía el ID de conexión a tu memberAuthEndpoint y recibe una identidad de miembro firmada. Consulta Terminación de conexiones de miembros para el flujo completo de inicio de sesión.
Ambas rutas demuestran lo mismo: algo que posee el secreto de la app avaló esta conexión. Suscribirse a un canal público no demuestra nada y no autoriza nada.
El caso de solo canales públicos
Un cliente que solo se suscribe a canales públicos normalmente no contacta tu backend. Después de requerir conexiones autorizadas, llama a signin() para que la conexión pueda autorizarse sin una suscripción privada:
import { BirdRealtime } from "@messagebird/realtime";
const bird = new BirdRealtime({
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: "/bird/auth/member",
});
await bird.signin();
const status = bird.subscribe("build-status");
status.bind("build-finished", (data) => render(data));import BirdRealtime
let bird = BirdRealtime(options: .init(
appKey: "your-app-key",
region: "us1",
memberAuthEndpoint: URL(string: "https://your-backend.example.com/bird/auth/member")
))
try await bird.signin()
let status = bird.subscribe("build-status")
status.bind("build-finished") { data in
render(data)
}import com.bird.realtime.BirdRealtime
import com.bird.realtime.BirdRealtimeOptions
val bird = BirdRealtime(
BirdRealtimeOptions(
appKey = "your-app-key",
region = "us1",
memberAuthEndpoint = "https://your-backend.example.com/bird/auth/member",
)
)
bird.signin() // suspending
val status = bird.subscribe("build-status")
status.bind("build-finished") { data ->
render(data)
}Llama a signin() una sola vez. El cliente inicia sesión de nuevo tras cada reconexión porque la identidad pertenece a la conexión. Devuelve 403 Forbidden desde tu endpoint de autorización de miembros cuando el solicitante no deba conectarse.
Si la app se suscribe a un canal privado o de presencia al cargarse, la suscripción exitosa ya autoriza la conexión.
Qué ve el cliente cuando no se autoriza
El edge cierra la conexión con el código 4009 y el motivo Connection not authorized within timeout. Los clientes no reintentan códigos en este rango, así que la conexión entra en el estado failed.
bird.connection.bind("error", ({ code, message }) => {
if (code === 4009) console.warn(message);
});bird.onError { error in
if error.code == 4009 { print(error.message) }
}bird.onError { error ->
if (error.code == 4009) println(error.message)
}El código 4009 también identifica a un miembro cuyas conexiones tu backend terminó. Revisa el motivo antes de elegir un estado de inicio de sesión o de sesión cerrada. Consulta Terminación de conexiones de miembros y Ciclo de vida de la conexión y reconexión.
Las conexiones no cuentan para la cuota de conexiones de la app hasta que se autorizan.
Alcance de la autorización
Requerir conexiones autorizadas controla quién puede mantener una conexión abierta. No reemplaza las verificaciones de autorización ni cambia quién puede leer un canal:
- Un canal público sigue siendo público para cada conexión autorizada. Si los eventos pertenecen a un cliente, usa un canal privado y verifica el nombre del canal en tu endpoint.
- Cualquiera para quien tus propios endpoints de autenticación firmen queda autorizado, así que un endpoint permisivo otorga autorización tan libremente como lo hacía la clave de app.
Próximos pasos
- Autorización de canales es la firma que tu backend calcula para suscripciones privadas y de presencia.
- Canales privados son la herramienta adecuada cuando los eventos en sí pertenecen a alguien.
- Terminación de conexiones de miembros cubre signin() y el otro uso de 4009.
- Envío de eventos a un miembro dirige un evento a una identidad con sesión iniciada en lugar de a un canal.
- Ciclo de vida de la conexión y reconexión explica por qué 4009 es terminal.
Recursos relacionados
Continúa con la documentación, guías y ejemplos sobre este tema. Los recursos están en inglés.
Explorar la funcionalidadRealtimeSeguir la ruta de aprendizajeBuild your first integrationGuía de implementaciónSend your first realtime event
Prueba el ejercicio y obtén un resumen de implementación