Exigir conexões autorizadas
A chave do app é pública. Qualquer pessoa que consiga carregar sua página pode usá-la para abrir uma conexão e se inscrever em canais públicos.
Conexões autorizadas exigem que cada nova conexão prove estar autorizada em até 30 segundos. O edge do Realtime fecha conexões que não autorizam a tempo.
Exigir conexões autorizadas
Ative Authorized connections para o app na página Realtime apps. Você também pode definir authorized_connections como true pela API do Realtime. A configuração se aplica a todas as conexões que usam uma das chaves do app.
Atualize os clientes para autorizar antes de ativar a configuração em produção. Conexões estabelecidas antes da ativação permanecem abertas, mas conexões posteriores de clientes mais antigos falham após o tempo limite de autorização.
O que conta como autorizado
Uma nova conexão começa não autorizada. Qualquer uma destas ações a autoriza:
- Uma inscrição em canal privado ou de presença é bem-sucedida. O cliente envia o ID da conexão para o seu authEndpoint, seu backend o assina e o edge verifica a assinatura. Veja Autorizando canais.
- signin() é bem-sucedido. O cliente envia o ID da conexão para o seu memberAuthEndpoint e recebe uma identidade de membro assinada. Veja Encerrando conexões de membros para o fluxo completo de sign-in.
Ambas as rotas provam a mesma coisa: algo que possui o segredo do app atestou esta conexão. Inscrever-se em um canal público não prova nada e não autoriza nada.
O caso de canais apenas públicos
Um cliente que se inscreve apenas em canais públicos normalmente não contata seu backend. Depois de exigir conexões autorizadas, chame signin() para que a conexão possa autorizar sem uma inscrição 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)
}Chame signin() uma vez. O cliente faz sign-in novamente após cada reconexão porque a identidade pertence à conexão. Retorne 403 Forbidden do seu endpoint de autorização de membro quando o chamador não deve se conectar.
Se o app se inscreve em um canal privado ou de presença ao carregar, a inscrição bem-sucedida já autoriza a conexão.
O que o cliente vê quando não autoriza
O edge fecha a conexão com o código 4009 e o motivo Connection not authorized within timeout. Os clientes não tentam novamente códigos nessa faixa, então a conexão entra no 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)
}O código 4009 também identifica um membro cujas conexões seu backend encerrou. Verifique o motivo antes de escolher um estado de login ou desconectado. Veja Encerrando conexões de membros e Ciclo de vida da conexão e reconexão.
Conexões não contam para a cota de conexões do app até serem autorizadas.
Escopo da autorização
Exigir conexões autorizadas controla quem pode manter uma conexão aberta. Isso não substitui verificações de autorização nem altera quem pode ler um canal:
- Um canal público continua público para todas as conexões autorizadas. Se os eventos pertencem a um cliente específico, use um canal privado e verifique o nome do canal no seu endpoint.
- Qualquer pessoa que seus próprios endpoints de autenticação assinem está autorizada, então um endpoint permissivo distribui autorização tão livremente quanto a chave do app fazia.
Próximos passos
- Autorizando canais é a assinatura que seu backend calcula para inscrições em canais privados e de presença.
- Canais privados são a ferramenta certa quando os eventos em si pertencem a alguém.
- Encerrando conexões de membros abrange signin() e o outro uso de 4009.
- Enviando eventos para um membro endereça um evento a uma identidade conectada em vez de a um canal.
- Ciclo de vida da conexão e reconexão explica por que 4009 é terminal.
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Explore a funcionalidadeRealtimeSiga o percurso de aprendizagemBuild your first integrationGuia de implementaçãoSend your first realtime event
Experimente na prática e obtenha um resumo de implementação