Administrar
Configurar fornecedores de identidade
A ligação passo a passo de cada fornecedor de identidade — onde encontrar o ID de cliente e o segredo, que forma tem o URL do emissor, e o único URI de redirecionamento que tens de registar. Cobre Microsoft, Google e qualquer fornecedor OIDC conforme ao standard.
9 min de leitura
Controlo de acesso explica o que um fornecedor faz. Esta página é a ligação: os valores exatos que cada um pede e onde os encontrar.
O URI de redirecionamento vem primeiro
Todos os fornecedores, sem exceção, precisam de um valor registado do lado deles: o URL para onde devolvem o utilizador depois do início de sessão.
https://o-teu-host-do-agente/auth/callback
O painel mostra o valor exato em cada fornecedor que abrires, em Acesso → Início de sessão, com um botão de copiar. Usa-o — não o escrevas à mão.
Note
Regista-o depois de definires o teu próprio domínio do agente na página Instalar no Excel. Até lá o painel mostra o host predefinido, e o URI de redirecionamento muda assim que definires um real, deixando de corresponder ao que registaste. Os fornecedores comparam esta cadeia carácter a carácter: um https:// em falta, uma barra final ou uma porta diferente produzem o mesmo erro pouco útil de "redirect_uri mismatch".
Microsoft — contas profissionais ou escolares
Usa o fornecedor Entra ID. Cobre as contas alojadas num diretório Microsoft (tu@a-tua-empresa.com), não os endereços pessoais de Outlook ou Hotmail.
- No portal do Azure, vai a Microsoft Entra ID → Registos de aplicações → Novo registo.
- Em URI de redirecionamento, escolhe Web e cola o URL de callback do painel.
- Copia o ID de aplicação (cliente) e o ID de diretório (inquilino) da página de descrição geral.
- Em Certificados e segredos → Novo segredo de cliente, cria um segredo e copia o seu valor de imediato: o Azure nunca mais o mostra.
- No ConnXL, adiciona o fornecedor Entra, cola o ID de cliente e o de inquilino, e aponta o segredo de cliente ao teu próprio cofre.
Quem pode iniciar sessão é uma escolha à parte nesse fornecedor:
- Apenas a minha organização Microsoft — o emissor fica fixado ao teu inquilino. Quem estiver de fora é recusado antes de qualquer outra regra ser verificada.
- Qualquer organização Microsoft — aceita diretórios de outras empresas, sujeito às tuas regras de audiência. Exige duas coisas no teu registo de aplicação que o ConnXL não consegue definir nem detetar: o registo tem de aceitar contas de qualquer diretório organizacional (multi-tenant) e pedir o claim opcional
xms_edovno token de acesso (Configuração de token → Adicionar claim opcional). Sem o primeiro, a Microsoft recusa por si própria os inícios de sessão externos; sem o segundo, todos os inícios de sessão são recusados do nosso lado, porque esse claim é o único sinal de que um email pertence mesmo a quem o apresenta.
Microsoft — contas pessoais
Usa o fornecedor Conta pessoal Microsoft para endereços de outlook.com, hotmail.com e live.com. Não estão em nenhum diretório Entra, por isso o fornecedor Entra nunca as aceitará.
A configuração é igual à anterior com uma diferença: em Novo registo, escolhe como tipos de conta suportados Apenas contas pessoais Microsoft (ou «qualquer diretório organizacional e contas pessoais Microsoft» se quiseres ambas as populações). Não há emissor para introduzir: todas as contas pessoais Microsoft vivem num único diretório da Microsoft, e o ConnXL fixa esse emissor por ti.
Note
Isto deixa entrar qualquer pessoa com uma conta Microsoft gratuita. Combina-o com a lista de domínios permitidos, ou com uma audiência de utilizadores nomeados, a não ser que o teu suplemento seja mesmo público.
Microsoft — qualquer conta
Usa o fornecedor Microsoft (qualquer conta) quando os teus utilizadores misturam diretórios de trabalho/escola e contas pessoais, e queres um único botão de início de sessão para todos. Não há tenant nem emissor a introduzir: o início de sessão passa pelo endpoint common da Microsoft, e o ConnXL verifica o emissor de cada token contra o tenant em que esse mesmo token foi emitido.
A configuração é o mesmo registo de aplicação de cima, com dois ajustes ambos obrigatórios (o ConnXL não consegue definir nem detetar nenhum deles, e errar num falha como um erro opaco da Microsoft):
- Em Novo registo (ou depois em Autenticação → Tipos de conta suportados), escolhe Contas em qualquer diretório organizacional e contas pessoais Microsoft. Qualquer escolha mais estreita faz com que a própria Microsoft recuse uma das duas classes de conta.
- Em Configuração de token → Adicionar afirmação opcional → ID, adiciona
xms_edov. Os emails de contas de trabalho só são aceites quando a Microsoft atesta o proprietário do domínio; sem a afirmação, todo o início de sessão com conta de trabalho é recusado do nosso lado (as contas pessoais não são afetadas: o endereço é a identidade verificada da conta).
Note
Tal como o fornecedor de contas pessoais, isto deixa entrar qualquer pessoa com qualquer conta Microsoft. Restringe com a lista de domínios permitidos ou uma audiência nomeada — e prefere o fornecedor Entra ID normal quando todos os teus utilizadores vivem em diretórios conhecidos.
Usa o fornecedor Google. Não há emissor para introduzir: a Google tem exatamente um, partilhado por todas as contas Google.
- Na consola do Google Cloud, vai a APIs e serviços → Credenciais → Criar credenciais → ID de cliente OAuth.
- Tipo de aplicação Aplicação Web; adiciona o URL de callback em URIs de redirecionamento autorizados.
- Copia o ID de cliente e o segredo de cliente.
O equivalente à escolha «quem pode iniciar sessão» da Microsoft vive do lado da Google, em Ecrã de consentimento OAuth → Tipo de utilizador:
- Interno — apenas contas da tua organização do Google Workspace.
- Externo — qualquer conta Google da internet. Enquanto a app estiver em Teste tens um limite de 100 utilizadores de teste nomeados; publicá-la remove-o.
Note
Uma app Google Externa e publicada aceita todas as contas Google que existem. O ConnXL não tem um interruptor por organização para a Google porque o emissor da Google não transporta nenhuma organização: restringe com a lista de domínios permitidos.
Qualquer outro fornecedor (OIDC genérico)
Usa o fornecedor OpenID Connect para tudo o resto. Não tem limite: liga o Okta e o Auth0 e o teu próprio Keycloak lado a lado, cada um com o seu botão de início de sessão.
Precisa de três coisas: o URL do emissor, um ID de cliente e um segredo de cliente. O ConnXL lê o documento /.well-known/openid-configuration do emissor para descobrir os endpoints de autorização, token e JWKS, por isso nunca os introduzes.
O emissor tem de ser um URL https:// com host: um domínio simples é recusado. O seletor Configurar para, ao lado do campo, muda o exemplo para a forma do teu fornecedor:
| Field | Type | Description |
|---|---|---|
OktaOptional | emissor | Normalmente https://a-tua-org.okta.com, ou https://a-tua-org.okta.com/oauth2/default se usares um servidor de autorização próprio. Applications → Create App Integration → OIDC → Web Application. |
Auth0Optional | emissor | O domínio do teu tenant, p. ex. https://o-teu-tenant.us.auth0.com. Applications → Create Application → Regular Web Application. |
KeycloakOptional | emissor | Com o realm no caminho: https://id.a-tua-empresa.com/realms/o-teu-realm. Clients → Create client → OpenID Connect, com client authentication ativado. |
AWS CognitoOptional | emissor | https://cognito-idp.<região>.amazonaws.com/<id-do-user-pool>. Atenção: se o pool permitir auto-registo, qualquer pessoa pode criar uma conta. |
Ping IdentityOptional | emissor | https://auth.pingone.com/<id-do-ambiente> para o PingOne. |
Qualquer outro fornecedor conforme ao standard funciona da mesma maneira: se publicar um documento de descoberta, o ConnXL consegue usá-lo.
Âmbitos
Deixa a lista de âmbitos vazia a não ser que o teu fornecedor precise de mais do que os predefinidos. O ConnXL pede sempre o necessário para identificar o utilizador; âmbitos extra só servem quando o teu IdP exige um explícito para entregar o claim do email.
Segurança ao nível da linha (troca de token)
Tudo o que vem acima serve para pôr alguém com sessão iniciada. Esta secção é sobre o que acontece a seguir: levar essa identidade até à tua própria base de dados, para que uma consulta devolva as linhas dessa pessoa e de mais ninguém.
O modo de autenticação Troca de token de início de sessão de uma ligação HTTP torna isso possível. Em vez de reencaminhar o token da Microsoft tal como está, o agente emite um JWT de curta duração a partir da identidade que acabou de validar, assina-o com um segredo que tu forneces, e envia-o como bearer token em cada pedido que a função faz.
O token emitido leva sub, email e name do utilizador do Excel com sessão iniciada, mais role, aud, iss, iat e exp. O PostgREST — a API REST que o Supabase gera sobre a tua base de dados — e o Hasura aceitam exatamente esta forma, por isso as tuas políticas de Row-Level Security aplicam-se por utilizador: cada pedido vindo de uma célula chega como a pessoa que escreveu a fórmula, e não como uma única conta de serviço partilhada.
Qual dos dois modos de utilizador escolher
user_token— reencaminhamento direto. Escolhe-o quando a tua API valida os tokens da Microsoft por si própria: já tem o emissor, a audiência e as chaves de assinatura configurados, e lê a identidade de quem chama diretamente do token que o agente reencaminha.user_token_exchange— troca de token. Escolhe-o quando a tua API valida os seus próprios JWT e não sabe nada da Microsoft: PostgREST, Supabase, Hasura, ou qualquer serviço que verifique um segredo HS256 partilhado. O agente é a ponte entre os dois mundos.- Ambos os modos enviam a credencial como
Authorization: Bearer <token>. Se a tua API a lê de outro cabeçalho, indica esse nome no campouserTokenHeaderda ligação: o token passa então a ser enviado sem prefixo nesse cabeçalho. Deixa-o vazio para o comportamento predefinido.
Receita: linhas por utilizador a partir do Supabase
- Encontra o segredo de assinatura. No teu painel do Supabase, vai a Project Settings → API → JWT Secret. É esse o segredo com que o PostgREST verifica cada token que recebe.
- Guarda-o como referência. Põe o valor no teu próprio cofre de segredos e aponta-lhe o campo
exchangeSecretda ligação —secret://env/SUPABASE_JWT_SECRET, ou qualquer um dos outros backends listados em Ligações. O valor em si nunca chega ao ConnXL. - Cria a ligação. Tipo HTTP API, URL base
https://<project-ref>.supabase.co/rest/v1, autenticação Troca de token de início de sessão, audiênciaauthenticated. - Adiciona o cabeçalho
apikey. O PostgREST quer a anon key do teu projeto em cada pedido, além do bearer token. Adiciona-a como cabeçalho extra na ligação — nomeapikey, valor a anon key, de novo como referênciasecret://. Sem ela, o Supabase recusa a chamada antes sequer de olhar para o JWT. - Escreve a política. Ativa o RLS na tabela e assenta-a num claim do token emitido:
create policy "own rows" on documents for select using (auth.jwt()->>'sub' = user_id);Usa antes auth.jwt()->>'email' quando as tuas linhas forem identificadas pelo endereço de email e não pelo subject id do fornecedor.
Os campos da troca
| Field | Type | Description |
|---|---|---|
exchangeSecretRequired | secret://… | Uma referência ao segredo HS256 com que o token é assinado — no Supabase, Project Settings → API → JWT Secret. É só de escrita: depois de guardado, o painel apenas mostra que há um segredo definido, nunca o seu valor. |
exchangeAudienceRequired | string | O claim aud colocado no token emitido. O Supabase e o PostgREST esperam authenticated. |
exchangeIssuerOptional | string | O claim iss. Deixa-o vazio a não ser que o serviço recetor fixe um emissor específico. |
exchangeTtlSecondsOptional | number | Durante quanto tempo um token emitido continua válido, entre 60 e 600 segundos. Por omissão 300. |
exchangeRoleOptional | string | Um claim role fixo em cada token emitido. Por omissão authenticated, que é o que o Supabase espera de quem tem sessão iniciada. |
O teu agente passa a emitir tokens para o teu próprio projeto
É esse mesmo o propósito do modo, e vale a pena tê-lo presente: qualquer pessoa que consiga chamar uma função sobre esta ligação recebe um token emitido em seu nome. Três coisas o delimitam:
- O segredo fica na tua infraestrutura. O agente resolve a referência
secret://no momento da execução, no teu host. O ConnXL guarda a referência, nunca o valor, e nenhum token emitido vai para os logs. - Os tokens duram pouco. Dez minutos é o teto, cinco a predefinição: chega para um recálculo, é pouco de mais para valer a pena guardar.
- O utilizador tem de ter sessão iniciada no Excel. Não há recurso anónimo: uma célula que chame uma destas funções sem ninguém com sessão iniciada falha com um erro de início de sessão, em vez de emitir em silêncio um token com claims vazios.
Quando o início de sessão não funciona
- «redirect_uri mismatch» — o URL registado não corresponde ao que o painel mostra, carácter a carácter. Copia-o de novo.
- «redirect_uri mismatch» a queixar-se de
http://versushttps://(o Entra mostra-o comoAADSTS500112) — o TLS termina num balanceador de carga ou proxy inverso à frente do agente, e o agente não confia nos cabeçalhos reencaminhados por predefinição. DefineCONNXL_TRUSTED_PROXY=1no host do agente para que o callback seja construído comohttps://. - O início de sessão resulta mas o suplemento recusa-te à mesma — a autenticação funcionou, a autorização não. Revê os domínios permitidos/negados e a audiência em Controlo de acesso.
- Todos os inícios de sessão Entra falham no modo «qualquer organização» — falta o claim opcional
xms_edovno registo de aplicação. - Não acontece nada ao carregar no botão de início de sessão — o agente tem de servir HTTPS de confiança; o Excel recusa-se a carregar um suplemento, ou a sua janela de início de sessão, a partir de um host não fiável.