Tudo acontece em Configurações > Identidade e SSO no console: o provedor OIDC, qual grupo do diretório vira qual time, contas locais para rede fechada, a política de dispositivos e a sincronização com o diretório. Salvar valida antes de gravar e aplica ao vivo, sem reiniciar.
A Atlasberg já tinha login único para o portal e o console. O login por dispositivo o estende até o terminal do desenvolvedor: a pessoa entra com a identidade corporativa, o terminal recebe um token pessoal, e o gateway troca esse token pela chave virtual do time a cada requisição. Este tutorial monta as duas metades.
[Figura: Tela Identidade e SSO do console com a aba Provedor (OIDC) aberta - Configurações > Identidade e SSO. Quatro abas: Provedor (OIDC), Grupos e times, Login local, Dispositivos. Os três selos de estado à direita dizem o que está ligado.]
Nenhum segredo passa pela tela: O client secret só como nome de variável; a senha local só entra, hasheada com PBKDF2, e nunca sai. Salvar valida antes de gravar e aplica ao vivo. Sessões abertas continuam válidas: uma mudança de scope não desloga a empresa inteira.
No Entra ID, no Keycloak ou no AD FS, crie um aplicativo do tipo web com a redirect URL que a tela sugere, no formato https://llm.empresa.com/api/atlasberg/sso/callback. Anote o client id e o client secret. No Entra, se a organização tem pessoas em mais de duzentos grupos, ligue depois a opção de consultar o diretório (overage).
O client secret entra como variável de ambiente do container, por exemplo ATLASBERG_SSO_CLIENT_SECRET. No Docker, pelo --env ou pelo arquivo de ambiente do compose; no Kubernetes, por um Secret montado como variável. Na tela informa-se apenas o nome da variável. Um valor literal é recusado. A leitura mostra o nome e se a variável está definida, nunca o conteúdo.
Marque Login único (OIDC) habilitado. Issuer: Entra é https://login.microsoftonline.com/<tenant>/v2.0, Keycloak é https://kc.interno/realms/empresa; a descoberta roda em /.well-known/openid-configuration. Client ID e o nome da variável do segredo. Redirect URL: clique em Usar sugerido e registre exatamente esse valor no provedor. Scopes: openid profile; no Keycloak acrescente groups. Se o provedor usa certificado interno, o caminho do PEM montado no container. Testar conexão: verde significa que o gateway alcançou o provedor e leu os endpoints. Salvar e aplicar: o login pelo SSO fica disponível no portal na mesma hora.
Cada grupo do diretório casa com um time do gateway. O time decide a chave virtual, o orçamento e as políticas que a pessoa recebe. Há dois jeitos: colocar o GUID do grupo no campo SourceID do time, em Governança, e o casamento é automático; ou escrever a regra aqui, com prioridade, que vence a regra automática. Quem entra sem grupo mapeado cai no time padrão, ou em nenhum time, e nesse caso autentica mas tem a inferência recusada até um administrador vincular um.
Necessária em rede fechada sem provedor, e recomendada em qualquer caso como conta de emergência do console. Crie a conta com usuário, nome, senha de pelo menos doze caracteres e a opção Acesso ao console. A senha é hasheada com PBKDF2 antes de tocar o disco e nunca é exibida. Trocar senha, retirar o acesso ao console e remover estão na mesma tabela. Remover uma conta revoga os tokens pessoais dela.
Marque Login por dispositivo habilitado e ajuste a política se os padrões não servirem. Salvar e aplicar. Desligar depois derruba todos os tokens na hora e fecha as rotas do fluxo.
Três caminhos, e eles convivem. Quem tem Node instala com npm install -g @atlasberg/cli (ou roda npx @atlasberg/cli sem instalar). Em rede fechada, o desenvolvedor baixa a CLI em Meus dispositivos no portal, para o sistema dele, e coloca o arquivo no PATH com o nome atlasberg. Em empresas com gerenciamento de estações, o mesmo binário pode ir pelo pacote padrão da TI: ele não tem dependência e não precisa de instalação. O próprio gateway serve as builds em /api/atlasberg/sso/downloads/<arquivo>, para Linux (x86_64 e arm64), macOS (Intel e Apple Silicon) e Windows. Depois disso, o roteiro do desenvolvedor é o Tutorial 3: atlasberg login, confirmar no portal, eval "$(atlasberg env)".
docker run -d --name atlasberg ... \
-e ATLASBERG_SSO_CLIENT_SECRET='<client secret>' \
-e ATLASBERG_PROXIES_CONFIAVEIS='10.0.0.0/8' \
atlasberg-proxy:<versão>Tudo acima também pode ser versionado como <app-dir>/sso.json. Editado à mão, exige reiniciar o gateway; editado pela tela, é aplicado ao vivo. As contas locais criadas pela tela são gravadas como salt, hash e iterações, nunca como senha.
{
"enabled": true,
"issuer": "https://login.microsoftonline.com/<tenant>/v2.0",
"client_id": "<app-id>",
"client_secret": "env.ATLASBERG_SSO_CLIENT_SECRET",
"redirect_url": "https://llm.empresa.com/api/atlasberg/sso/callback",
"scopes": ["openid", "profile"],
"directory_graph": { "enabled": true },
"group_teams": [{ "group_id": "<guid-do-grupo>", "team_id": "time-eng", "priority": 10 }],
"default_team": "",
"local_login": { "enabled": true, "console_group": "atlasberg-console", "accounts": [] },
"device_flow": { "enabled": true, "token_ttl_hours": 168, "code_ttl_minutes": 10,
"poll_interval_seconds": 5, "max_tokens_per_user": 5 }
}Na aba Grupos e times, o bloco Sincronização com o diretório. Precisa de uma credencial de aplicativo separada da do login: no Entra ID, um aplicativo com Group.Read.All e User.Read.All; no Keycloak, um client com service account e os papéis view-users e query-groups. O segredo entra como nome de variável de ambiente, igual ao do SSO.
O que não prometer: Sem a sincronização, a saída de uma pessoa do diretório só é sentida no token quando ele expira, em sete dias por padrão, ou quando alguém revoga. Com a sincronização, em até uma hora. AD FS puro não tem API de leitura de grupos: sincronização só com Entra ID ou Keycloak. A CLI guarda o token em arquivo com permissão restrita, não no keychain do sistema.
Em Governança, um time com os orçamentos, o limite de taxa e a chave com os provedores que todo time novo deve herdar.
O prefixo dos grupos que viram times (só esses entram), tipo ia-, ou a lista de ids.
Departamento ou empresa dos membros, por maioria, ou a cadeia de grupos pai no Keycloak. Ou não atribuir.
O gateway lê o diretório e mostra o que criaria, renomearia e arquivaria, sem mudar nada.
Depois disso o ciclo roda sozinho no intervalo escolhido, sessenta minutos por padrão, e a última execução fica visível na tela com os contadores e os erros.
Autenticar com o token numa requisição de IA não gera evento próprio, de propósito: é o caminho normal da inferência, já coberto pelos eventos de admissão e métricas, e um evento por requisição deixaria um token roubado inflar a trilha.
Se preferir delegar, cole o prompt abaixo no Claude Code ou em outro agente de IA com acesso ao terminal. Ele foi escrito para perguntar tudo o que precisa antes de mexer em qualquer coisa, mostrar um plano, esperar a sua confirmação e só então executar. Ele nunca pede o valor de uma chave de provedor e nunca grava segredo em arquivo do repositório.
O que a pessoa vê: o comando, o código, o portal, as variáveis.
Todas as telas do menu Configurações, inclusive Identidade e SSO.
Você é meu administrador da Atlasberg Platform e vai configurar o login único (OIDC), o mapeamento de grupos para times e o login por dispositivo, seguindo https://atlasberg.com/docs/tutoriais/configurar-sso e a referência em https://atlasberg.com/docs/api/gestao. Trabalhe pela API de identidade do gateway com curl. Nunca invente valores: pergunte.
Antes de qualquer alteração, me pergunte, uma pergunta por vez:
1. A URL pública do gateway (exemplo: https://llm.empresa.com) e como autenticar na API de gestão (usuário e senha de administrador). Nunca repita a senha nem a grave em arquivo.
2. O provedor de identidade: Entra ID, Keycloak ou AD FS. O issuer (Entra: https://login.microsoftonline.com/<tenant>/v2.0; Keycloak: https://<host>/realms/<realm>).
3. O client id do aplicativo registrado no provedor e o NOME da variável de ambiente do appliance que guarda o client secret (exemplo: ATLASBERG_SSO_CLIENT_SECRET). Não me peça o valor do segredo. Se a variável ainda não estiver definida no container, me diga como definir (Docker --env ou Kubernetes Secret) e espere eu confirmar que reiniciei.
4. Os scopes (padrão openid profile; no Keycloak acrescentar groups) e, se o provedor usa certificado interno, o caminho do PEM da CA montado no container.
5. As regras de grupo para time: para cada grupo do diretório (GUID no Entra, nome ou id no Keycloak), qual time do gateway recebe as pessoas dele. Se o time ainda não existe, avise que ele precisa ser criado em Governança > Times antes. E qual é o time padrão para quem entra sem grupo mapeado, ou nenhum.
6. Se quero login local habilitado (recomendado como conta de emergência do console) e o nome do grupo que dá acesso ao console (padrão atlasberg-console). As contas locais e as senhas eu mesmo crio na tela Login local; você não vai manusear senhas.
7. A política de dispositivos: ligado ou desligado, validade do token em horas (padrão 168, de 1 a 2160), validade do código em minutos (padrão 10), intervalo de consulta em segundos (padrão 5) e tokens ativos por pessoa (padrão 5).
8. Se há balanceador ou edge na frente do gateway e, se sim, os CIDRs dele para ATLASBERG_PROXIES_CONFIAVEIS.
9. Se quero sincronizar a árvore de times com o diretório (só Entra ID ou Keycloak): client id do aplicativo de leitura, nome da variável do segredo, prefixo dos grupos que viram times (exemplo: ia-), id do time modelo e intervalo em minutos (padrão 60).
Quando tiver tudo, mostre a configuração final em tabela e peça confirmação. Só então execute, conferindo cada status e parando no primeiro erro:
a) GET /api/atlasberg/identidade/config e guarde a resposta: ela tem as seções provedor, grupos, login_local, dispositivos e diretorio, e é esse formato que o PUT espera. Nunca envie um segredo literal; o campo client_secret_env recebe só o nome da variável.
b) POST /api/atlasberg/identidade/config/testar com {"issuer":"...","ca_cert_path":"...","client_secret_env":"..."} e me mostre os endpoints descobertos. Se falhar, pare e me mostre o erro.
c) PUT /api/atlasberg/identidade/config com a resposta do passo a) alterada: provedor.enabled true, issuer, client_id, client_secret_env, redirect_url igual a <gateway>/api/atlasberg/sso/callback, scopes, ca_cert_path se houver; grupos.group_teams como lista de {"group_id":"...","team_id":"<id do time>","priority":10} e grupos.default_team; login_local.enabled e console_group; dispositivos com enabled, token_ttl_hours, code_ttl_minutes, poll_interval_seconds e max_tokens_per_user; diretorio conforme o item 9, ou intacto. Confira com um novo GET que ficou como planejado.
d) Me diga exatamente o que registrar no provedor de identidade: a redirect URL do passo c) e, no Entra, a opção de overage se houver pessoas em mais de duzentos grupos.
e) Se houver balanceador, me lembre de definir ATLASBERG_PROXIES_CONFIAVEIS no container e reiniciar; explique que sem isso todos os usuários aparecem com o IP do balanceador.
f) Sincronização, se eu tiver pedido: POST /api/atlasberg/identidade/diretorio/previa e me mostre o que seria criado, renomeado e arquivado; só depois da minha confirmação, POST /api/atlasberg/identidade/diretorio/sincronizar.
g) Testes: POST /api/atlasberg/sso/device/code com {"client_name":"teste"} tem de devolver um user_code no formato XXXX-XXXX; GET /api/atlasberg/sso/downloads mostra se as builds da CLI estão disponíveis para os desenvolvedores. Não é possível testar o login pelo provedor sem um navegador: me peça para entrar no portal e confirmar que o botão do SSO aparece e o login funciona.
h) Entregue um resumo do que ficou configurado, o que eu ainda preciso fazer (contas locais na tela, registro no provedor, distribuição da CLI) e a rotina de operação do tutorial (saída de pessoa, laptop perdido, suspeita de abuso).
Regras: se um endpoint responder diferente do esperado, mostre a resposta e pergunte antes de contornar. Não desligue o login local sem me avisar. Não altere nada fora da seção de identidade.A Atlasberg Platform é a camada de controle entre uma empresa e todos os modelos de IA: cada requisição é autenticada com uma chave virtual, filtrada por política e DLP, roteada para o provedor certo e gravada numa trilha de auditoria encadeada por hash. Expõe uma API compatível com a OpenAI, então as aplicações só trocam a URL base.
O mesmo artefato roda na Atlasberg Cloud, na sua VPC, on-premises ou totalmente air-gapped, e é cobrado por capacidade e módulos, nunca por assento.
Esta página faz parte da documentação oficial. Para falar com o time de engenharia, escreva para [email protected] ou use https://atlasberg.com/pt-br/contato. A resposta vem em até um dia útil.
Agentes: esta página também está disponível em Markdown em /pt-br/docs/tutoriais/configurar-sso.md, ou pedindo esta URL com o cabeçalho Accept: text/markdown. Índice de tudo: /llms.txt.