Pular para o conteúdo

Contas conectadas

Deixe os usuários conectarem uma vez as contas do GitHub, Google Drive, Slack e outros serviços, e deixe as suas APIs e servidores MCP obterem os tokens dessas contas pelo Authio.

Agentes e APIs muitas vezes precisam agir em outro serviço como o usuário: abrir uma issue no GitHub, ler um arquivo no Google Drive. As contas conectadas guardam esse acesso no Authio. O usuário conecta a conta uma vez, o Authio guarda e renova os tokens dela, e o seu servidor de recurso troca o token que recebeu do usuário pelo access token do serviço externo sempre que precisar. O refresh token do serviço externo nunca sai do Authio.

Um provedor de conexão é o app OAuth que o seu realm registra no serviço externo. Cada realm usa o próprio app, então o que os usuários de um realm autorizam nunca alcança outro.

As contas conectadas precisam estar incluídas no seu plano. O plano também define quantas contas podem estar conectadas ao mesmo tempo e quantas trocas de token podem ser feitas por mês.

Como funciona

  1. Você registra um provedor de conexão

    O app OAuth que você criou no GitHub, no Google ou em outro serviço, registrado no realm.

  2. O usuário conecta a conta dele

    Nas telas hospedadas do Authio, já logado na sua aplicação, o usuário autoriza o serviço. O Authio guarda os tokens cifrados.

  3. O seu servidor de recurso troca o token do usuário

    Quando o usuário chama a sua API ou o seu servidor MCP, ele apresenta o access token que recebeu ao endpoint de token do Authio, numa requisição de token exchange.

  4. O Authio devolve o access token do provedor

    Renovado antes, se estiver para vencer. O seu servidor chama o serviço com ele, em nome do usuário.

Registre um provedor de conexão

  1. Crie o app no provedor

    No serviço externo, crie um app OAuth e cadastre nele esta URL de callback (redirect):

    URL de callbackTexto simples
    https://authio.api.hyperio.tech/realms/acme/connections/callback
  2. Registre-o no Authio

    Abra Conexões externas, escolha Nova conexão externa, selecione o tipo e preencha os dados do app:

    CampoRegras
    AliasDe 2 a 64 letras minúsculas, dígitos e hífens, como google-drive. Único no realm e fixo depois de criado, porque os links de conexão e as requisições de troca o usam.
    Nome de exibiçãoAté 128 caracteres, mostrado aos usuários.
    Client ID e segredoOs do app que você criou. O segredo é guardado cifrado e nunca mais é mostrado.
    EscoposO que uma conexão pede ao serviço. Em branco, valem os escopos padrão do tipo. Separe-os com espaços; vírgulas também são aceitas.
    Servidores de recurso autorizadosOs servidores de recurso que podem trocar tokens deste provedor. Vazio quer dizer todos os servidores de recurso do realm, inclusive os criados depois.
  3. Mantenha-o ativo

    Só um provedor ativo aceita novas conexões e trocas. Desativar um provedor mantém as contas já conectadas por ele.

Tipos de provedor

TipoEscopos padrãoRenovação do token
GitHub AppNenhum: as permissões ficam no appQuando o app usa tokens que expiram
GitHub OAuth Appread:user user:emailDesnecessária: os tokens dele não expiram
GitLabread_api read_userSim
Google Driveopenid email https://www.googleapis.com/auth/drive.fileSim
Microsoft OneDriveoffline_access User.Read Files.ReadSim
Dropboxaccount_info.read files.metadata.read files.content.readSim
Slackchannels:read users:readSim
NotionNenhum: o usuário escolhe as páginas no consentimentoSim
Atlassianread:me read:jira-work offline_accessSim
LinearreadSim
OAuth 2.0 personalizadoOs seus. Exige endpoints https de autorização, de token e de dados do usuário; o de revogação é opcional.Sim

Deixe os usuários conectarem as contas

A conexão acontece nas telas hospedadas do Authio, para um usuário logado no realm pelo seu client. Mande-o para um destes dois endereços em https://authio.api.hyperio.tech:

EndereçoO que faz
/realms/acme/clients/acme-web/account/connectionsA página de contas conectadas do usuário: os provedores ativos do realm, as contas já conectadas, a conta padrão de cada provedor e os botões para conectar e desconectar.
/realms/acme/clients/acme-web/connections/google-drive/connectComeça direto a conexão com um provedor. Aceita return_to, um caminho sob /realms/acme/ para onde voltar depois, e context, o ID de uma organização para a qual a conexão é feita.
  • Sem uma sessão do realm e do client, o usuário cai numa página de erro que pede para entrar primeiro.
  • O fluxo usa PKCE (S256) com todo provedor que o aceita, e um state de uso único válido por 15 minutos.
  • Na volta do provedor, a página de destino recebe connected=google-drive em caso de sucesso, ou connection_error=ConnectionDenied quando o usuário recusou.
  • Reconectar a mesma conta externa renova os tokens dela e a coloca de novo em vigor. A primeira conta conectada de um provedor vira a padrão.

Obtenha o token do serviço externo

Só um servidor de recurso pode fazer a troca. Quem chama se autentica como o cliente de introspecção de um servidor de recurso ativo — um client confidencial com o grant Token Exchange habilitado — e o access token do usuário precisa estar endereçado (aud) a um dos servidores de recurso dele.

RequisiçãoBash
curl -X POST https://authio.api.hyperio.tech/realms/acme/protocol/openid-connect/token \
  -u "acme-api:YOUR_CLIENT_SECRET" \
  -d "grant_type=urn:ietf:params:oauth:grant-type:token-exchange" \
  -d "subject_token=$USER_ACCESS_TOKEN" \
  -d "subject_token_type=urn:ietf:params:oauth:token-type:access_token" \
  -d "requested_token_type=urn:authio:params:oauth:token-type:connection-access-token" \
  -d "connection_provider=google-drive"
  • Envie connection_id para escolher uma conexão quando o usuário tem várias. Sem ele, o Authio usa a conexão padrão, ou a única ativa.
  • Um token que vence em até 60 segundos é renovado com o provedor antes de ser devolvido, e requisições simultâneas nunca gastam o mesmo refresh token duas vezes.
  • expires_in fica de fora quando o token do provedor não expira. O refresh token do provedor nunca faz parte da resposta.

Quando não há token para devolver

Os erros vêm no formato OAuth, com error_code e, quando ajudam, connect_uri, connection_provider e connections:

RespostaJSON
{
  "error": "connection_required",
  "error_code": "ConnectionRequired",
  "connection_provider": "google-drive",
  "connect_uri": "https://authio.api.hyperio.tech/realms/acme/clients/acme-web/connections/google-drive/connect"
}
ErroO que fazer
connection_requiredO usuário não tem conexão utilizável — nunca conectou, ou o provedor recusou uma renovação. Mande-o para o connect_uri, que aponta para o client pelo qual ele entrou.
connection_selection_requiredVárias conexões ativas e nenhuma padrão. Escolha uma em connections (id, label, external_login) e repita com connection_id.
connection_policy_violationA conta deixou de atender à política da organização. O usuário precisa conectar uma conta que a política aceite.
invalid_targetO provedor não existe, está inativo ou não permite este servidor de recurso.
invalid_grantO token do usuário não está ativo, não está endereçado a um dos seus servidores de recurso ou não nomeia um usuário.
unauthorized_clientQuem chama não é o cliente de introspecção de um servidor de recurso ativo.
access_deniedO plano não inclui contas conectadas, ou as trocas do mês acabaram.
temporarily_unavailableO provedor falhou ou não respondeu a tempo. A conexão fica como estava; tente de novo mais tarde.

Organizações e políticas de conexão

Toda conexão é feita para um contexto: o próprio usuário ou uma das organizações dele. Um token com org_id só alcança conexões feitas para aquela organização; um token sem ele só alcança as pessoais.

Cada organização pode definir políticas de conexão na aba Pessoas, dizendo quais contas externas aceita:

  • Domínios de e-mail permitidos, com comparação exata: acme.com não aceita br.acme.com. Contas Google são conferidas pelo domínio do Workspace, então uma conta @gmail.com é recusada.
  • Organizações do GitHub permitidas, para provedores do GitHub: a conta precisa ser membro ativo de uma delas.
  • A política própria de um provedor substitui a política geral da organização; as duas nunca se somam.
  • Com Exigir contexto da organização desligado, um token da organização pode recorrer à conta pessoal do usuário naquele provedor, desde que a política a aceite.

As políticas são aplicadas quando a conta é conectada e de novo a cada troca. Uma conexão que deixa de atender à política é marcada como violação de política e fica inutilizável até o usuário conectar uma conta aceita — afrouxar a política depois não a traz de volta.

Desconectar e revogar

  • O usuário desconecta uma conta na página de contas conectadas dele. O Authio pede ao provedor que revogue os tokens, até onde cada provedor permite, e apaga a conexão.
  • Administradores revogam a conexão de um usuário na aba Credenciais do usuário, em Usuários. Os tokens são descartados e a conexão continua listada como revogada até o usuário conectar a mesma conta de novo.
  • Excluir um provedor revoga e apaga todas as conexões feitas por ele.
Estado da conexãoSignificado
ActiveTem um token que pode ser usado ou renovado.
NeedsReauthO provedor recusou uma renovação, ou o token venceu sem como renovar. O usuário precisa conectar de novo.
PolicyViolationA conta deixou de atender à política de conexão da organização.
RevokedUm administrador a revogou.

Notas de segurança

  • Access e refresh tokens ficam cifrados em repouso. A API administrativa nunca os devolve; ela mostra datas, escopos concedidos e a conta externa.
  • Só o cliente de introspecção de um servidor de recurso pode fazer a troca, e só com um token de usuário endereçado a um dos servidores dele.
  • Restrinja cada provedor aos servidores de recurso que precisam dele: uma lista vazia quer dizer todos.
  • Cada conexão guarda a própria trilha — conectada, usada, renovada, falha na renovação, desconectada, revogada, violação de política — na aba Acesso do provedor, e toda troca, entregue ou recusada, fica no log de acesso como token exchange.

Próximos passos

Cookies de analytics

Gostaríamos de medir como o console é usado, com o Google Analytics, para enxergar em quais telas as pessoas travam. Isso grava um cookie que reconhece este navegador na sua próxima visita.

Recusar não muda mais nada. Os cookies que mantêm você conectado e lembram o seu idioma e o seu tema são necessários para o console funcionar, e ficam de qualquer forma. Ler a Política de Privacidade