{"id":10404,"date":"2026-09-19T19:46:59","date_gmt":"2026-09-19T22:46:59","guid":{"rendered":"https:\/\/www.fernandoquadro.com.br\/html\/?p=10404"},"modified":"2026-09-19T19:46:59","modified_gmt":"2026-09-19T22:46:59","slug":"geoserver-ldap-autenticacao-grupos-controle-acesso","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2026\/09\/19\/geoserver-ldap-autenticacao-grupos-controle-acesso\/","title":{"rendered":"GeoServer + LDAP: autentica\u00e7\u00e3o centralizada, grupos e roles na pr\u00e1tica"},"content":{"rendered":"<p>Prezado leitor,<\/p>\n<p>O intuito do post de hoje \u00e9 que voc\u00ea aprenda como integrar o GeoServer a um servidor LDAP, autenticar usu\u00e1rios, transformar grupos LDAP em roles e preparar essas roles para utiliza\u00e7\u00e3o nas regras de seguran\u00e7a do GeoServer. O laborat\u00f3rio utiliza GeoServer 3, OpenLDAP e Docker Compose.<\/p>\n<p>Em instala\u00e7\u00f5es simples do GeoServer \u00e9 comum administrar usu\u00e1rios diretamente pela interface da aplica\u00e7\u00e3o. Esse modelo funciona bem em laborat\u00f3rios, treinamentos e ambientes pequenos. Em ambientes corporativos, por\u00e9m, normalmente a organiza\u00e7\u00e3o j\u00e1 possui uma infraestrutura centralizada de identidade. \u00c9 nesse cen\u00e1rio que entra o <strong>LDAP (Lightweight Directory Access Protocol)<\/strong>.<\/p>\n<p>Em vez de manter usu\u00e1rios e senhas dentro do pr\u00f3prio GeoServer, podemos integr\u00e1-lo a um diret\u00f3rio LDAP e utilizar os usu\u00e1rios e grupos existentes na organiza\u00e7\u00e3o. A arquitetura passa a ser semelhante a esta:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07.png\" alt=\"\" width=\"1536\" height=\"872\" class=\"aligncenter size-full wp-image-10405\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07.png 1536w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07-300x170.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07-1024x581.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07-768x436.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07-600x341.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_02_07-945x536.png 945w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p>Uma forma simples de entender essa integra\u00e7\u00e3o \u00e9: <strong>O LDAP autentica. O GeoServer autoriza.<\/strong><\/p>\n<p>O GeoServer possui suporte nativo \u00e0 autentica\u00e7\u00e3o LDAP atrav\u00e9s de <strong>LDAP Bind<\/strong>. Tamb\u00e9m pode transformar os grupos encontrados no LDAP em roles utilizadas posteriormente nas regras de seguran\u00e7a do GeoServer. A ideia \u00e9 criar tr\u00eas usu\u00e1rios com diferentes n\u00edveis de acesso e, posteriormente, utilizar os grupos LDAP para controlar o acesso dentro do GeoServer.<\/p>\n<p>A vers\u00e3o 3.0.1 do GeoServer tamb\u00e9m trouxe a melhoria da GEOS-12095 relacionada \u00e0 convers\u00e3o entre o nome do membro do grupo LDAP e o nome utilizado na pesquisa de usu\u00e1rios.<\/p>\n<p><strong>1. Estrutura do Laborat\u00f3rio<\/strong><\/p>\n<p>Neste artigo vou utilizar o GeoServer 3.0.1, que no momento da publica\u00e7\u00e3o deste texto \u00e9 a vers\u00e3o est\u00e1vel recomendada para produ\u00e7\u00e3o. A vers\u00e3o 3.0.1 tamb\u00e9m trouxe uma melhoria espec\u00edfica relacionada \u00e0 convers\u00e3o de usu\u00e1rios LDAP (GEOS-12095 relacionada \u00e0 convers\u00e3o entre o nome do membro do grupo LDAP e o nome utilizado na pesquisa de usu\u00e1rios), al\u00e9m de corre\u00e7\u00f5es de seguran\u00e7a importantes.<\/p>\n<p><strong>2. Criando o Docker Compose<\/strong><\/p>\n<p>Neste artigo, eu vou considerar que voc\u00ea j\u00e1 instalou o Docker no seu ambiente, ent\u00e3o vamos criar agora o arquivo <strong>docker-compose.yml<\/strong> com o seguinte conte\u00fado:<\/p>\n<pre>\r\nservices:\r\n  geoserver:\r\n    image: docker.osgeo.org\/geoserver:3.0.1\r\n    container_name: geoserver\r\n    ports:\r\n      - \"8080:8080\"\r\n    environment:\r\n      PROXY_BASE_URL: http:\/\/localhost:8080\/geoserver\r\n      GEOSERVER_ADMIN_USER: admin\r\n      GEOSERVER_ADMIN_PASSWORD: geoserver\r\n    volumes:\r\n      - geoserver_data:\/opt\/geoserver_data\r\n    depends_on:\r\n      openldap:\r\n        condition: service_started\r\n\r\n  openldap:\r\n    image: osixia\/openldap:1.5.0\r\n    container_name: openldap\r\n    environment:\r\n      LDAP_ORGANISATION: \"Geocursos Lab\"\r\n      LDAP_DOMAIN: \"geocursos.lab\"\r\n      LDAP_ADMIN_PASSWORD: \"adminldap\"\r\n      LDAP_TLS: \"false\"\r\n    ports:\r\n      - \"389:389\"\r\n    volumes:\r\n      - .\/ldap\/10-geoserver-acl.ldif:\/container\/service\/slapd\/assets\/config\/bootstrap\/ldif\/custom\/10-geoserver-acl.ldif:ro\r\n      - .\/ldap\/20-geoserver-users.ldif:\/container\/service\/slapd\/assets\/config\/bootstrap\/ldif\/custom\/20-geoserver-users.ldif:ro\r\n    command: [\"--copy-service\"]\r\n\r\nvolumes:\r\n  geoserver_data:\r\n<\/pre>\n<p>A imagem oficial Docker do GeoServer \u00e9 mantida pelo pr\u00f3prio projeto e publicada no reposit\u00f3rio OSGeo. Tamb\u00e9m estamos expondo a porta 389 apenas para facilitar nossos testes locais. Em produ\u00e7\u00e3o, n\u00e3o faria sentido necessariamente expor o LDAP dessa forma.<\/p>\n<p><strong>3. Criando nossa estrutura LDAP<\/strong><\/p>\n<p>Agora precisamos criar os usu\u00e1rios e grupos que ser\u00e3o utilizados. Vamos ent\u00e3o criar o arquivo <strong>ldap\/20-geoserver-users.ldif<\/strong> com o seguinte conte\u00fado:<\/p>\n<pre>\r\ndn: ou=people,dc=geocursos,dc=lab\r\nobjectClass: organizationalUnit\r\nou: people\r\n\r\n\r\ndn: ou=groups,dc=geocursos,dc=lab\r\nobjectClass: organizationalUnit\r\nou: groups\r\n\r\n\r\ndn: uid=alice,ou=people,dc=geocursos,dc=lab\r\nobjectClass: inetOrgPerson\r\ncn: Alice Publico\r\nsn: Publico\r\nuid: alice\r\nmail: alice@geocursos.lab\r\nuserPassword: alice123\r\n\r\n\r\ndn: uid=bob,ou=people,dc=geocursos,dc=lab\r\nobjectClass: inetOrgPerson\r\ncn: Bob Restrito\r\nsn: Restrito\r\nuid: bob\r\nmail: bob@geocursos.lab\r\nuserPassword: bob123\r\n\r\n\r\ndn: uid=carol,ou=people,dc=geocursos,dc=lab\r\nobjectClass: inetOrgPerson\r\ncn: Carol Admin\r\nsn: Admin\r\nuid: carol\r\nmail: carol@geocursos.lab\r\nuserPassword: carol123\r\n\r\n\r\ndn: cn=geoserver_publico,ou=groups,dc=geocursos,dc=lab\r\nobjectClass: groupOfNames\r\ncn: geoserver_publico\r\nmember: uid=alice,ou=people,dc=geocursos,dc=lab\r\nmember: uid=bob,ou=people,dc=geocursos,dc=lab\r\nmember: uid=carol,ou=people,dc=geocursos,dc=lab\r\n\r\n\r\ndn: cn=geoserver_restrito,ou=groups,dc=geocursos,dc=lab\r\nobjectClass: groupOfNames\r\ncn: geoserver_restrito\r\nmember: uid=bob,ou=people,dc=geocursos,dc=lab\r\nmember: uid=carol,ou=people,dc=geocursos,dc=lab\r\n\r\n\r\ndn: cn=geoserver_admin,ou=groups,dc=geocursos,dc=lab\r\nobjectClass: groupOfNames\r\ncn: geoserver_admin\r\nmember: uid=carol,ou=people,dc=geocursos,dc=lab\r\n<\/pre>\n<p>E agora um segundo arquivo chamado 10-geoserver-acl.ldif com o seguinte conte\u00fado:<\/p>\n<pre>\r\ndn: olcDatabase={1}{{ LDAP_BACKEND }},cn=config\r\nchangetype: modify\r\nadd: olcAccess\r\nolcAccess: {2}to dn.subtree=\"ou=groups,{{ LDAP_BASE_DN }}\" by dn.exact=\"cn=admin,{{ LDAP_BASE_DN }}\" write by users read by * none\r\n<\/pre>\n<p>Teremos portanto:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54.png\" alt=\"\" width=\"1536\" height=\"798\" class=\"aligncenter size-full wp-image-10408\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54.png 1536w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54-300x156.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54-1024x532.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54-768x399.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54-600x312.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_17_54-945x491.png 945w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p>Observe que os grupos formam uma esp\u00e9cie de progress\u00e3o de permiss\u00f5es:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap.png\" alt=\"\" width=\"986\" height=\"206\" class=\"aligncenter size-full wp-image-10407\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap.png 986w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap-300x63.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap-768x160.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap-600x125.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/tabela_usuarios_ldap-945x197.png 945w\" sizes=\"auto, (max-width: 986px) 100vw, 986px\" \/><\/p>\n<p>As senhas utilizadas no laborat\u00f3rio s\u00e3o propositalmente simples. Elas n\u00e3o devem ser reutilizadas fora desse ambiente did\u00e1tico.<\/p>\n<p><strong>4. Iniciando os containers<\/strong><\/p>\n<p>Para subir os containers digite:<\/p>\n<pre>\r\ndocker compose up -d\r\n<\/pre>\n<p>Depois confira se eles realmente subiram:<\/p>\n<pre>\r\ndocker compose ps\r\n<\/pre>\n<p>Ent\u00e3o acesse: <strong>http:\/\/localhost:8080\/geoserver<\/strong><\/p>\n<p>Para o laborat\u00f3rio podemos utilizar inicialmente as credenciais padr\u00e3o.<\/p>\n<p><strong>5. Validando o LDAP antes de envolver o GeoServer<\/strong><\/p>\n<p>Uma boa pr\u00e1tica de troubleshooting \u00e9 testar primeiro o LDAP isoladamente. Podemos, por exemplo, listar nossos usu\u00e1rios:<\/p>\n<pre>\r\ndocker exec -it openldap \\\r\nldapsearch \\\r\n-x \\\r\n-H ldap:\/\/localhost:389 \\\r\n-D \"cn=admin,dc=geocursos,dc=lab\" \\\r\n-w adminldap \\\r\n-b \"ou=people,dc=geocursos,dc=lab\" \\\r\n\"(objectClass=inetOrgPerson)\" \\\r\nuid cn\r\n<\/pre>\n<p>Devemos encontrar as informa\u00e7\u00f5es dos nossos 3 usu\u00e1rios (alice, bob e carol). Agora pergunte ao LDAP a quais grupos o Bob pertence:<\/p>\n<pre>\r\ndocker exec -it openldap \\\r\nldapsearch \\\r\n-x \\\r\n-H ldap:\/\/localhost:389 \\\r\n-D \"uid=bob,ou=people,dc=geocursos,dc=lab\" \\\r\n-w bob123 \\\r\n-b \"ou=groups,dc=geocursos,dc=lab\" \\\r\n\"(member=uid=bob,ou=people,dc=geocursos,dc=lab)\" \\\r\ncn\r\n<\/pre>\n<p>O resultado esperado \u00e9: geoserver_publico e geoserver_restrito. Esse teste \u00e9 importante porque elimina v\u00e1rias d\u00favidas antes mesmo de configurarmos o GeoServer. Se o LDAP n\u00e3o consegue localizar o usu\u00e1rio ou seus grupos, o problema ainda n\u00e3o est\u00e1 no GeoServer.<\/p>\n<p><strong>6. Configurando a autentica\u00e7\u00e3o LDAP no GeoServer<\/strong><\/p>\n<p>Agora entre no GeoServer como administrador e acesse: <strong>Security -> Authentication -> Authentication Providers -> Add new -> LDAP<\/strong><\/p>\n<p>Nessa mesma tela voc\u00ea configura tanto a autentica\u00e7\u00e3o do usu\u00e1rio quanto, opcionalmente, a descoberta dos grupos LDAP usados para gerar roles.<\/p>\n<p>O GeoServer atual permite informar diretamente a URL LDAP, o padr\u00e3o do DN do usu\u00e1rio e a estrat\u00e9gia utilizada para procurar os grupos desse usu\u00e1rio. Para nosso laborat\u00f3rio utilize:<\/p>\n<pre>\r\nName\r\nldap-geocursos\r\n\r\nServer URL\r\nldap:\/\/openldap:389\/dc=geocursos,dc=lab\r\n\r\nUser DN pattern\r\nuid={0},ou=people\r\n\r\nUse LDAP groups for authorization:\r\n\u2713\r\n\r\nBind before group search:\r\n\u2713\r\n\r\nGroup search base:\r\nou=groups\r\n\r\nGroup search filter:\r\nmember={0}\r\n\r\n<\/pre>\n<p>Na pr\u00f3pria tela do LDAP Authentication Provider existe a \u00e1rea de teste. Ent\u00e3o digite o username bob e a senha bob123, e clique no bot\u00e3o <strong>Test Connection<\/strong>, para verificar se a integra\u00e7\u00e3o entre o LDAP e o GeoServer est\u00e1 funcional.<\/p>\n<p><strong>7. N\u00e3o esque\u00e7a a Authentication Provider Chain<\/strong><\/p>\n<p>Criar o provider n\u00e3o significa necessariamente que ele esteja participando da autentica\u00e7\u00e3o. Volte para <strong>Security -> Authentication<\/strong> o localize <strong>Provider Chain<\/strong> e adicione <strong>ldap-geocursos<\/strong> aos providers selecionados. <\/p>\n<p>Mantenha tamb\u00e9m o provider loca padr\u00e3o do GeoServer (GeoServer Local). Essa estrat\u00e9gia mant\u00e9m, inclusive, uma conta administrativa local para conting\u00eancia.<\/p>\n<p>Em ambientes corporativos gosto de pensar nela como uma conta break glass: o LDAP pode estar indispon\u00edvel e ainda precisamos ter uma forma extremamente controlada de administrar o GeoServer.<\/p>\n<p>Ap\u00f3s esse passo, fa\u00e7a logout do GeoServer e e tente acessar com o username bob e a senha bob123. O resultado esperado \u00e9 que voc\u00ea consiga logar com o usu\u00e1rio bob.<\/p>\n<p><strong>8. Do grupo LDAP para a Role do GeoServer<\/strong><\/p>\n<p>Aqui aparece uma das partes mais interessantes dessa integra\u00e7\u00e3o.<\/p>\n<p>Quando o GeoServer utiliza grupos LDAP para autoriza\u00e7\u00e3o, ele transforma automaticamente o nome do grupo em uma role: Nome do grupo -> ROLE_ grupo <\/p>\n<p>Esse comportamento \u00e9 documentado oficialmente pelo GeoServer. Portanto nossos grupos se tornam: <\/p>\n<p>geoserver_publico -> ROLE_GEOSERVER_PUBLICO<br \/>\ngeoserver_restrito -> ROLE_GEOSERVER_RESTRITO<br \/>\ngeoserver_admin -> ROLE_GEOSERVER_ADMIN<\/p>\n<p>Isso significa que Bob, por exemplo, ser\u00e1 autenticado com: ROLE_GEOSERVER_PUBLICO e ROLE_GEOSERVER_RESTRITO.<\/p>\n<p><strong>9. LDAP sozinho n\u00e3o protege nenhuma camada<\/strong><\/p>\n<p>Esse talvez seja o ponto mais importante deste artigo. Configurar LDAP responde: Quem \u00e9 o usu\u00e1rio? Mas ainda precisamos responder: O que esse usu\u00e1rio pode acessar?<\/p>\n<p>O GeoServer utiliza roles para controlar acesso \u00e0s camadas. E existe um detalhe importante: a configura\u00e7\u00e3o padr\u00e3o de Layer Security permite leitura an\u00f4nima das camadas.<\/p>\n<p>Portanto simplesmente configurar LDAP n\u00e3o torna automaticamente seus dados privados. A arquitetura completa \u00e9:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11.png\" alt=\"\" width=\"1536\" height=\"804\" class=\"aligncenter size-full wp-image-10411\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11.png 1536w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11-300x157.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11-1024x536.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11-768x402.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11-600x314.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_46_11-945x495.png 945w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p><strong>10. LDAP Role Service: quando ele entra? (opcional)<\/strong><\/p>\n<p>At\u00e9 aqui utilizamos uma abordagem bastante direta, por\u00e9m o GeoServer tamb\u00e9m possui um recurso chamado LDAP Role Service, que \u00e9 um servi\u00e7o somente leitura que transforma grupos LDAP em roles. Assim como no provider de autentica\u00e7\u00e3o, o nome do grupo \u00e9 convertido para mai\u00fasculas e recebe o prefixo ROLE_.<\/p>\n<p>Uma configura\u00e7\u00e3o para nosso diret\u00f3rio poderia utilizar:<\/p>\n<pre>\r\nServer URL:\r\nldap:\/\/openldap:389\/dc=geocursos,dc=lab\r\n\r\nGroup search base:\r\nou=groups\r\n\r\nGroup user membership search filter:\r\nmember=uid={0},ou=people,dc=geocursos,dc=lab\r\n\r\nAll groups search filter:\r\ncn=*\r\n\r\nAuthenticate to extract roles:\r\n\u2713\r\n\r\nUsername:\r\ncn=admin,dc=geocursos,dc=lab\r\n\r\nPassword:\r\nadminldap\r\n<\/pre>\n<p>O caminho na interface \u00e9: Security -> Users, Groups, Roles -> Role Services -> Add new -> LDAP<\/p>\n<p>A vantagem desse modelo aparece principalmente quando queremos que as roles LDAP fa\u00e7am parte explicitamente do sistema de roles do GeoServer e estejam dispon\u00edveis nas telas de configura\u00e7\u00e3o de acesso. O tutorial oficial do GeoServer apresenta exatamente essa segunda etapa.<\/p>\n<p>Para um primeiro laborat\u00f3rio, entretanto, o mapeamento realizado pelo pr\u00f3prio LDAP Authentication Provider j\u00e1 \u00e9 suficiente para entender o conceito.<\/p>\n<p>Neste laborat\u00f3rio utilizamos o administrador do OpenLDAP apenas para simplificar a demonstra\u00e7\u00e3o. Em produ\u00e7\u00e3o, utilize uma conta de servi\u00e7o somente leitura, com apenas as permiss\u00f5es necess\u00e1rias para consultar usu\u00e1rios e grupos.<\/p>\n<p><strong>11. O desenho final<\/strong><\/p>\n<p>Depois de toda a configura\u00e7\u00e3o, nosso ambiente fica conceitualmente assim:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06.png\" alt=\"\" width=\"1536\" height=\"817\" class=\"aligncenter size-full wp-image-10412\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06.png 1536w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06-300x160.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06-1024x545.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06-768x409.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06-600x319.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2026\/09\/ChatGPT-Image-19-de-set.-de-2026-18_53_06-945x503.png 945w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/p>\n<p>Esse \u00e9 o verdadeiro ganho da integra\u00e7\u00e3o.<\/p>\n<p>O GeoServer deixa de ser respons\u00e1vel por manter uma base paralela de usu\u00e1rios e passa a trabalhar sobre a estrutura de identidade que j\u00e1 existe na organiza\u00e7\u00e3o.<\/p>\n<p><strong>12. Cuidados para produ\u00e7\u00e3o<\/strong><\/p>\n<p>O laborat\u00f3rio utiliza deliberadamente configura\u00e7\u00f5es simplificadas. Em produ\u00e7\u00e3o eu revisaria pelo menos estes pontos:<\/p>\n<ul>\n<li>N\u00e3o utilizar LDAP sem criptografia em redes n\u00e3o confi\u00e1veis. O GeoServer suporta tanto ldaps:\/\/, normalmente na porta 636, quanto STARTTLS sobre LDAP. H\u00e1 uma particularidade: a documenta\u00e7\u00e3o informa que o uso de STARTTLS impede o pooling de conex\u00f5es LDAP, criando uma nova conex\u00e3o por autentica\u00e7\u00e3o e podendo afetar desempenho.<\/li>\n<li>N\u00e3o utilizar as senhas deste laborat\u00f3rio, nem admin\/geoserver. A imagem Docker oficial tamb\u00e9m recomenda substituir as credenciais padr\u00e3o.<\/li>\n<li>Manter uma conta administrativa local de conting\u00eancia, fortemente protegida, em vez de tornar a administra\u00e7\u00e3o completamente dependente da disponibilidade do LDAP.<\/li>\n<li>Evitar mapear grupos de neg\u00f3cio acidentalmente para ROLE_ADMINISTRATOR. Essa role possui acesso administrativo completo ao GeoServer.<\/li>\n<li>Revisar explicitamente Layer Security, Service Security e REST Security. Integrar LDAP n\u00e3o torna automaticamente as camadas privadas; por padr\u00e3o, a leitura de layers \u00e9 aberta e a configura\u00e7\u00e3o de Service Security come\u00e7a sem regras.<\/li>\n<li>Em containers, guardar credenciais de bind em Secrets, n\u00e3o diretamente no docker-compose.yml, Deployment ou reposit\u00f3rio Git. O usu\u00e1rio usado apenas para pesquisa de grupos deve possuir o m\u00ednimo de permiss\u00f5es necess\u00e1rias.<\/li>\n<li>\nN\u00e3o expor o LDAP sem necessidade. Se GeoServer e LDAP estiverem em uma mesma infraestrutura privada, apenas a comunica\u00e7\u00e3o necess\u00e1ria entre eles deve ser permitida.<\/li>\n<\/ul>\n<p><strong>13. Conclus\u00e3o<\/strong><\/p>\n<p>Integrar GeoServer e LDAP n\u00e3o \u00e9 apenas substituir uma tela de login. Com a combina\u00e7\u00e3o de <strong>LDAP + grupos + roles + regras de seguran\u00e7a<\/strong>, \u00e9 poss\u00edvel integrar o GeoServer a uma infraestrutura corporativa de identidade sem precisar manter manualmente usu\u00e1rios e permiss\u00f5es duplicados dentro da aplica\u00e7\u00e3o.<\/p>\n<p>E isso torna a administra\u00e7\u00e3o especialmente interessante em ambientes com v\u00e1rios usu\u00e1rios, diferentes perfis de acesso e dados que n\u00e3o podem simplesmente ficar dispon\u00edveis de forma an\u00f4nima.<\/p>\n<p>Refer\u00eancias oficiais:<\/p>\n<p><a href=\"https:\/\/docs.geoserver.org\/main\/en\/user\/security\/tutorials\/ldap\/\" target=\"_blank\">GeoServer \u2014 Authentication with LDAP<\/a><br \/>\n<a href=\"https:\/\/docs.geoserver.org\/main\/en\/user\/security\/auth\/providers\/\/\" target=\"_blank\">GeoServer \u2014 Authentication Providers \/ LDAP<\/a><br \/>\n<a href=\"https:\/\/docs.geoserver.org\/main\/en\/user\/security\/layer\/\" target=\"_blank\">GeoServer \u2014 Layer Security<\/a><br \/>\n<a href=\"https:\/\/docs.geoserver.org\/main\/en\/user\/security\/service\/\" target=\"_blank\">GeoServer \u2014 Service Security<\/a><br \/>\n<a href=\"https:\/\/docs.geoserver.org\/3.0.x\/en\/user\/installation\/docker\/\" target=\"_blank\">GeoServer \u2014 Docker Container<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prezado leitor, O intuito do post de hoje \u00e9 que voc\u00ea aprenda como integrar o GeoServer a um servidor LDAP, autenticar usu\u00e1rios, transformar grupos LDAP em roles e preparar essas roles para utiliza\u00e7\u00e3o nas regras de seguran\u00e7a do GeoServer. O&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2026\/09\/19\/geoserver-ldap-autenticacao-grupos-controle-acesso\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":10420,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[304,208,358],"class_list":["post-10404","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-docker","tag-geoserver","tag-ldap"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=10404"}],"version-history":[{"count":9,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10404\/revisions"}],"predecessor-version":[{"id":10418,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/10404\/revisions\/10418"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/10420"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=10404"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=10404"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=10404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}