ULC Lab · implementação reproduzível
Laboratório: Autenticação Centralizada com Keycloak e SSO em Aplicação Web
Você implementará uma instância funcional do Keycloak, integrando autenticação centralizada (SSO) com uma aplicação web de exemplo e um diretório LDAP. O laboratório pode ser concluído em cerca de 2 horas.

- Duração estimada
- 120 min
- Passos
- 11
- Validações
- 5
- Versões da documentação consultada
- Keycloak 22.0.5 · OpenLDAP 2.5.x · Python Flask (aplicação de exemplo) a versão estável atual · Docker a versão estável atual
Este laboratório ensina como instalar e configurar o Keycloak em uma VM Linux, conectá-lo a um diretório OpenLDAP e integrar uma aplicação web de exemplo via OpenID Connect. Ao final, você terá um fluxo de autenticação centralizada, com usuários autenticando no Keycloak e acessando a aplicação sem múltiplos logins.
Topologia
Uma VM Linux (192.168.56.10) roda Keycloak e OpenLDAP. Uma aplicação web de exemplo (192.168.56.20) conecta-se ao Keycloak para autenticação via OpenID Connect. Usuários são provisionados no LDAP e autenticam-se pela interface do Keycloak.
+-------------------+
| Usuário Final |
+--------+----------+
|
v
+---------------------+---------------------+
| VM 1 (192.168.56.10) |
| +-----------+ +----------------+ |
| | OpenLDAP |<--->| Keycloak | |
| +-----------+ +----------------+ |
+---------------------+---------------------+
|
v
+--------+----------+
| Aplicação Web |
| (192.168.56.20) |
+------------------+Equipamentos e software
| Item | Requisito, licença ou versão |
|---|---|
| VM Linux (Ubuntu 22.04 LTS) | 2 vCPU, 3GB RAM, 1 interface de rede, acesso root |
| Keycloak | Apache 2.0 · 22.0.5 |
| OpenLDAP | OpenLDAP Public License · 2.5.x |
| Python Flask (aplicação de exemplo) | BSD · a versão estável atual |
| Docker | Apache 2.0 · a versão estável atual |
Roteiro
- Preparar a VM e instalar dependências
Atualize o sistema e instale Docker. Docker facilita o isolamento e a gestão dos serviços.
sudo apt update && sudo apt upgrade -y sudo apt install docker.io docker-compose -yO que você deve ver: Docker instalado, comandos 'docker' e 'docker-compose' disponíveis.
- Subir o OpenLDAP com Docker
O Keycloak precisa de um diretório externo para autenticação corporativa. O OpenLDAP será esse backend.
mkdir ~/ldap-lab && cd ~/ldap-lab echo 'version: "3" services: openldap: image: osixia/openldap:1.5.0 container_name: openldap environment: - LDAP_ORGANISATION=UpnetixLab - LDAP_DOMAIN=lab.upnetix - LDAP_ADMIN_PASSWORD=admin ports: - "389:389" volumes: - ./ldap-data:/var/lib/ldap - ./ldap-config:/etc/ldap/slapd.d' > docker-compose.yml docker-compose up -dO que você deve ver: Container 'openldap' em execução na porta 389.
- Popular o OpenLDAP com usuários de teste
Usuários precisam existir no LDAP para autenticação federada. Crie um LDIF básico.
echo 'dn: ou=users,dc=lab,dc=upnetix objectClass: organizationalUnit ou: users dn: uid=jose,ou=users,dc=lab,dc=upnetix objectClass: inetOrgPerson sn: Jose cn: Jose da Silva uid: jose userPassword: jose123 dn: uid=ana,ou=users,dc=lab,dc=upnetix objectClass: inetOrgPerson sn: Ana cn: Ana Souza uid: ana userPassword: ana123' > users.ldif docker cp users.ldif openldap:/tmp/users.ldif docker exec openldap ldapadd -x -D "cn=admin,dc=lab,dc=upnetix" -w admin -f /tmp/users.ldifO que você deve ver: Usuários 'jose' e 'ana' criados no OpenLDAP.
- Subir o Keycloak com Docker
Keycloak será o provedor de identidade central. Use Docker para facilitar o setup.
docker run -d --name keycloak --net=host -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.5 start-devO que você deve ver: Keycloak rodando em http://localhost:8080
- Acessar o painel de administração do Keycloak
Acesse o painel para configurar integrações. Use as credenciais admin/admin.
N/AO que você deve ver: Painel disponível em http://localhost:8080/admin
- Configurar o Keycloak para autenticação LDAP
Keycloak precisa buscar usuários no LDAP. Configure um User Federation apontando para o OpenLDAP.
No painel: 'User Federation' > 'ldap' > Adicionar novo provedor LDAP. Parâmetros: - Vendor: Other - Connection URL: ldap://localhost:389 - Bind DN: cn=admin,dc=lab,dc=upnetix - Bind Credential: admin - Users DN: ou=users,dc=lab,dc=upnetix - Edit Mode: READ_ONLYO que você deve ver: Usuários do LDAP aparecem em 'Users' no Keycloak.
- Criar um novo Realm para o laboratório
Realms isolam configurações e usuários. Crie um para separar o ambiente.
No painel: 'Add realm' > Nome: lab-realmO que você deve ver: Novo realm 'lab-realm' criado.
- Configurar um Client OIDC para a aplicação web
A aplicação web precisa autenticar via Keycloak. Crie um Client OIDC.
No painel: 'Clients' > 'Create client' - Client ID: flask-app - Client Type: OpenID Connect - Root URL: http://192.168.56.20:5000/ - Valid Redirect URIs: http://192.168.56.20:5000/*O que você deve ver: Client 'flask-app' criado e listado.
- Subir aplicação Flask de exemplo integrada ao Keycloak
A aplicação vai testar o login centralizado. Use um exemplo com Flask e Authlib.
ssh 192.168.56.20 sudo apt update && sudo apt install python3-pip -y pip3 install Flask Authlib cat > app.py <<EOF from flask import Flask, redirect, url_for, session from authlib.integrations.flask_client import OAuth app = Flask(__name__) app.secret_key = 'supersecret' oauth = OAuth(app) conf = { 'client_id': 'flask-app', 'client_secret': 'CONSULTE A DOCUMENTAÇÃO', 'api_base_url': 'http://192.168.56.10:8080/realms/lab-realm/protocol/openid-connect', 'access_token_url': 'http://192.168.56.10:8080/realms/lab-realm/protocol/openid-connect/token', 'authorize_url': 'http://192.168.56.10:8080/realms/lab-realm/protocol/openid-connect/auth', 'client_kwargs': {'scope': 'openid profile email'} } oauth.register('keycloak', **conf) @app.route('/') def homepage(): user = dict(session).get('user', None) if user: return f'Olá, {user["preferred_username"]}! <a href="/logout">Logout</a>' return '<a href="/login">Login</a>' @app.route('/login') def login(): redirect_uri = url_for('auth', _external=True) return oauth.keycloak.authorize_redirect(redirect_uri) @app.route('/auth') def auth(): token = oauth.keycloak.authorize_access_token() user = oauth.keycloak.parse_id_token(token) session['user'] = user return redirect('/') @app.route('/logout') def logout(): session.pop('user', None) return redirect('/') if __name__ == '__main__': app.run(host='0.0.0.0', port=5000) EOF python3 app.pyO que você deve ver: Aplicação Flask rodando em http://192.168.56.20:5000/
- Testar o login centralizado na aplicação
Acesse a aplicação web, clique em Login e faça autenticação via Keycloak usando usuário do LDAP.
N/AO que você deve ver: Redirecionamento para Keycloak, login com 'jose' ou 'ana', retorno autenticado para a aplicação.
- Testar SSO entre múltiplas abas
Abra duas abas da aplicação. Faça login em uma, recarregue a outra. O SSO deve manter a sessão.
N/AO que você deve ver: Usuário autenticado em ambas as abas sem novo login.
Como saber que funcionou
| Teste | Comando | Critério |
|---|---|---|
| Usuários do LDAP aparecem no Keycloak | No painel: 'Users' do realm 'lab-realm' | Usuários 'jose' e 'ana' listados |
| Login na aplicação Flask com usuário do LDAP | Acessar http://192.168.56.20:5000/ | Login redireciona para Keycloak, autentica e retorna para a aplicação |
| SSO entre abas | Abrir duas abas e logar em uma | Sessão mantida em ambas |
| Logout na aplicação Flask | Clicar em 'Logout' | Sessão encerrada, login exigido novamente |
| Acesso negado com senha errada | Tentar login com senha errada | Erro de autenticação |
Troubleshooting
| Sintoma | Causa provável | Correção |
|---|---|---|
| Usuários do LDAP não aparecem no Keycloak | Configuração de conexão LDAP incorreta | Verifique URL, DN e credenciais no painel do Keycloak |
| Erro ao logar na aplicação Flask | Client ID ou secret incorretos | Confirme os valores no painel do Keycloak e no app.py |
| Keycloak não sobe na porta 8080 | Porta em uso ou firewall bloqueando | Libere a porta ou altere a configuração do Keycloak |
| LDAP não inicializa | Permissões de volume ou porta ocupada | Verifique permissões e se a porta 389 está livre |
| SSO não funciona entre abas | Cookies de sessão bloqueados | Permita cookies de terceiros no navegador |
Segurança e hardening
- Altere as senhas padrão antes de uso em produção
- Restrinja o acesso à porta 389 (LDAP) e 8080 (Keycloak) apenas à rede interna
- Configure TLS para Keycloak e OpenLDAP em ambientes reais
- Utilize Edit Mode 'READ_ONLY' para evitar alterações acidentais no LDAP pelo Keycloak
- Revise as permissões dos arquivos de configuração
Checklist final
Referências
- OpenID Connect Core 1.0 · Openid (openid.net)
- RFC 6749 - OAuth 2.0 Authorization Framework · IETF (datatracker.ietf.org)
- LDAPv3 Wire Protocol Reference · Ldap (ldap.com)
- Publicado
- 09/09/2026
- Última revisão
- 09/09/2026
- Versão do conteúdo
- 1.0
- Referências
- 3 oficiais · 1 de normas ou órgãos
- Revisão técnica
- redação e revisão por IA, URLs conferidas na publicação
- Status
- Atual
