> ## Documentation Index
> Fetch the complete documentation index at: https://ayakaleaf-pro.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Autenticação LDAP

<Info>
  Este recurso foi desenvolvido por [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Aqui oferecemos alguns documentos para a sua configuração.
</Info>

<Warning>
  O Overleaf usa a biblioteca **passport-ldapauth**, que é relativamente desatualizada, e a compatibilidade com LDAP não pode ser totalmente garantida. Com certos provedores de identidade LDAP (por exemplo, [https://goauthentik.io/](https://goauthentik.io/)), podem ocorrer falhas de login. Portanto, se possível, recomenda-se usar preferencialmente o método OAuth/SAML. Para o goauthentik, siga o [Passo a passo: goauthentik](/pt/on-premises/configuration/overleaf-toolkit/authentication/ldap-authentication#passo-a-passo-goauthentik) abaixo, que foi testado.
</Warning>

### O que é LDAP

LDAP é um protocolo de autenticação usado para verificação de identidade externa. O Overleaf Server Pro oferece um formulário de login LDAP dedicado na interface web, separado do método de autenticação padrão. Quando um usuário envia seu nome de usuário e senha LDAP, o backend do Overleaf verifica as credenciais no servidor LDAP configurado, por exemplo `ldap://ldap:10389`.

<Frame caption="Um exemplo do Server Pro para LDAP">
  <img src="https://mintcdn.com/ayakaleaf-pro/x9kfDjtWlyyhG_mR/images/on-premises/image-29.png?fit=max&auto=format&n=x9kfDjtWlyyhG_mR&q=85&s=f3ebcacecec45115cf9b1fa55eb1ba94" alt="" width="2804" height="2005" data-path="images/on-premises/image-29.png" />
</Frame>

### Configuração

Internamente, o LDAP do Overleaf usa a biblioteca [passport-ldapauth](https://github.com/vesse/passport-ldapauth). A maioria dessas opções de configuração é repassada ao objeto de configuração `server`, usado para configurar o `passport-ldapauth`. Se você estiver tendo problemas para configurar o LDAP, vale a pena ler o README do `passport-ldapauth` para entender a configuração que ele espera.

A variável de ambiente `EXTERNAL_AUTH` é necessária para ativar o módulo de autenticação LDAP. Essa variável de ambiente especifica quais métodos de autenticação externa estão ativados. O valor dessa variável é uma lista. Se a lista incluir `ldap`, a autenticação LDAP será ativada.

Por exemplo: `EXTERNAL_AUTH=ldap saml`

Diferentemente do Overleaf CEP, em nossa edição ayaka-notes limitamos a autenticação LDAP a um método de autenticação puro, disponível em `http://your-overleaf.com/ldap/login`.

Ao usar métodos de autenticação LDAP, quando um usuário insere um `username` e uma `password` no formulário de login, ocorre o seguinte:

1. Um usuário LDAP é procurado no diretório LDAP usando o filtro definido por `OVERLEAF_LDAP_SEARCH_FILTER` e autenticado.
2. Se a autenticação for bem-sucedida, o banco de dados de usuários do Overleaf é verificado em busca de um usuário cujo endereço de e-mail principal corresponda ao endereço de e-mail do usuário LDAP autenticado:
   * Se um usuário correspondente for encontrado, o campo `hashedPassword` desse usuário é excluído (se existir). Isso garante que o usuário só possa fazer login via autenticação LDAP no futuro.
   * Se nenhum usuário correspondente for encontrado, um novo usuário do Overleaf é criado usando o e-mail, o nome e o sobrenome obtidos do servidor LDAP.

<Danger>
  Para usuários que fazem login via LDAP, não armazenamos (ou removemos os existentes) hashes de senha no banco de dados mongo do Overleaf.
</Danger>

#### Variáveis de ambiente

* `OVERLEAF_LDAP_URL` <strong>(obrigatória)</strong>
  * URL do servidor LDAP.
    * Exemplo: `ldaps://ldap.example.com:636` (LDAP sobre SSL)
    * Exemplo: `ldap://ldap.example.com:389` (sem criptografia ou STARTTLS, se configurado).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Nome de exibição do serviço de identidade LDAP, usado na página de login.
  * Padrão: `Log in with LDAP Provider`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * O atributo de e-mail retornado pelo servidor LDAP, padrão `mail`. Cada usuário LDAP deve ter pelo menos um endereço de e-mail. Se vários endereços forem fornecidos, apenas o primeiro será usado.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * O nome da propriedade que contém o nome do usuário usado na aplicação, geralmente `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * O nome da propriedade que contém o sobrenome do usuário usado na aplicação, geralmente `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * O nome da propriedade que contém o nome completo do usuário, geralmente `cn`. Se alguma das duas variáveis anteriores não estiver definida, o nome e/ou o sobrenome do usuário são extraídos desta variável. Caso contrário, ela não é usada.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * O texto de placeholder do formulário de login, padrão `Username`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se definida como `true`, atualiza os campos `first_name` e `last_name` do usuário LDAP no login e desativa o formulário de dados do usuário na página `/user/settings` para usuários LDAP. Caso contrário, os dados serão obtidos apenas no primeiro login.
* `OVERLEAF_LDAP_BIND_DN`
  * O nome distinto (DN) do usuário LDAP que deve ser usado para a conexão LDAP (esse usuário deve poder pesquisar/listar contas no servidor LDAP), por exemplo, `cn=ldap_reader,dc=example,dc=com`. Se não estiver definida, é usado o bind anônimo.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Senha para `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Propriedade do usuário usada para o bind no cliente, padrão `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` <strong>(obrigatória)</strong>
  * O DN base a partir do qual os usuários são pesquisados. Por exemplo, `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtro de pesquisa LDAP usado para encontrar um usuário. Use o literal '\{\{username}}' para que o nome de usuário informado seja interpolado na pesquisa LDAP.
    * Exemplo: `(|(uid={{username}})(mail={{username}}))` (o usuário pode fazer login com e-mail ou com o nome de login).
    * Exemplo: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * O escopo da pesquisa pode ser `base`, `one` ou `sub` (padrão).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Array JSON de atributos a serem obtidos do servidor LDAP, por exemplo, `["uid", "mail", "givenName", "sn"]`. Por padrão, todos os atributos são obtidos.
* `OVERLEAF_LDAP_STARTTLS`
  * Se `true`, é usado LDAP sobre TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Caminho para o arquivo que contém o certificado da CA usado para verificar o certificado SSL/TLS do servidor LDAP. Se houver vários certificados, pode ser um array JSON de caminhos para os certificados. Os arquivos devem estar acessíveis ao contêiner docker.
    * Exemplo (um certificado): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Exemplo (vários certificados): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Se `true`, o certificado do servidor é verificado em relação à lista de CAs fornecidas.
* `OVERLEAF_LDAP_CACHE`
  * Se `true`, até 100 credenciais por vez serão armazenadas em cache por 5 minutos.
* `OVERLEAF_LDAP_TIMEOUT`
  * Por quanto tempo o cliente deve deixar as operações em execução antes de expirar, em ms (padrão: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Quanto tempo o cliente deve esperar antes de expirar nas conexões TCP, em ms (padrão: padrão do SO).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` e `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Quando ambas as variáveis de ambiente estão definidas, o processo de login atualiza `user.isAdmin = true` se o perfil LDAP contiver o atributo especificado por `OVERLEAF_LDAP_IS_ADMIN_ATT` e seu valor corresponder a `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` ou for um array contendo `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`; caso contrário, `user.isAdmin` é definido como `false`. Se alguma dessas variáveis não estiver definida, o status de administrador só é definido como `true` durante a criação do usuário administrador no Launchpad.

As cinco variáveis a seguir são usadas para configurar como os contatos dos usuários são obtidos do servidor LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * O filtro usado para pesquisar usuários no servidor LDAP a serem carregados nos contatos. O placeholder '\{\{userProperty}}' dentro do filtro é substituído pelo valor da propriedade especificada por `OVERLEAF_LDAP_CONTACTS_PROPERTY` do usuário LDAP que inicia a pesquisa. Se não estiver definida, nenhum usuário é obtido do servidor LDAP para os contatos.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Especifica o DN base a partir do qual a pesquisa de contatos começa. Padrão: `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * O escopo da pesquisa pode ser `base`, `one` ou `sub` (padrão).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Especifica a propriedade do objeto de usuário que substituirá o placeholder '\{\{userProperty}}' em `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Especifica o valor de `OVERLEAF_LDAP_CONTACTS_PROPERTY` caso a pesquisa seja iniciada por um usuário não LDAP. Se esta variável não estiver definida, o filtro resultante não corresponderá a nada. O valor `*` pode ser usado como curinga.

<Accordion title="Exemplo">
  ```text theme={null}
  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
  ```

  O exemplo acima faz com que todos os usuários LDAP que têm o mesmo `gid` UNIX sejam carregados nos contatos do usuário LDAP atual. Usuários não LDAP terão em seus contatos todos os usuários LDAP com `gid=1000` UNIX.
</Accordion>

<Accordion title="Exemplo de arquivo variables.env">
  ```text theme={null}
  OVERLEAF_APP_NAME="Our Overleaf Instance"

  ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

  # Enables Thumbnail generation using ImageMagick
  ENABLE_CONVERSIONS=true

  # Disables email confirmation requirement
  EMAIL_CONFIRMATION_DISABLED=true

  ## Nginx
  # NGINX_WORKER_PROCESSES=4
  # NGINX_WORKER_CONNECTIONS=768

  ## Set for TLS via nginx-proxy
  # OVERLEAF_BEHIND_PROXY=true
  # OVERLEAF_SECURE_COOKIE=true

  OVERLEAF_SITE_URL=http://my-overleaf-instance.com
  OVERLEAF_NAV_TITLE=Our Overleaf Instance
  # OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
  OVERLEAF_ADMIN_EMAIL=support@example.com

  OVERLEAF_LEFT_FOOTER=[{"text": "Contact your support team", "url": "mailto:support@example.com"}]
  OVERLEAF_RIGHT_FOOTER=[{"text":"Hello, I am on the Right", "url":"https://github.com/yu-i-i/overleaf-cep"}]

  OVERLEAF_EMAIL_FROM_ADDRESS=team@example.com
  OVERLEAF_EMAIL_SMTP_HOST=smtp.example.com
  OVERLEAF_EMAIL_SMTP_PORT=587
  OVERLEAF_EMAIL_SMTP_SECURE=false
  # OVERLEAF_EMAIL_SMTP_USER=
  # OVERLEAF_EMAIL_SMTP_PASS=
  # OVERLEAF_EMAIL_SMTP_NAME=
  OVERLEAF_EMAIL_SMTP_LOGGER=false
  OVERLEAF_EMAIL_SMTP_TLS_REJECT_UNAUTH=true
  OVERLEAF_EMAIL_SMTP_IGNORE_TLS=false
  OVERLEAF_CUSTOM_EMAIL_FOOTER=This system is run by department x

  OVERLEAF_PROXY_LEARN=true
  NAV_HIDE_POWERED_BY=true

  #################
  ## LDAP for CE ##
  #################

  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_STARTTLS=true
  OVERLEAF_LDAP_TLS_OPTS_CA_PATH=/var/lib/overleaf/certs/ldap_ca_cert.pem
  OVERLEAF_LDAP_SEARCH_BASE=ou=people,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(|(uid={{username}})(mail={{username}}))
  OVERLEAF_LDAP_BIND_DN=cn=ldap_reader,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=GoodNewsEveryone
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_FIRST_NAME_ATT=givenName
  OVERLEAF_LDAP_LAST_NAME_ATT=sn
  # OVERLEAF_LDAP_NAME_ATT=cn
  OVERLEAF_LDAP_SEARCH_ATTRIBUTES=["uid", "sn", "givenName", "mail"]

  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true

  OVERLEAF_LDAP_PLACEHOLDER='Username or email address'

  OVERLEAF_LDAP_IS_ADMIN_ATT=mail
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=admin@example.com

  OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
  OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
  OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE='*'
  ```
</Accordion>

## Passo a passo: goauthentik

Este guia percorre uma configuração testada com o [goauthentik](https://goauthentik.io/). Os exemplos usam o Base DN `dc=example,dc=com`; substitua-o pelo seu.

<Steps>
  <Step title="Criar uma conta de bind">
    O Overleaf primeiro faz login no diretório com uma conta própria para encontrar o usuário. No Authentik, abra **Directory > Users**, clique em **New User**, escolha **Internal User** e clique em **Next**. Insira um nome de usuário, por exemplo `ldapservice`, e clique em **Create**:

    <Frame caption="Authentik: criar a conta de bind">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=bf5d9a5aefd048781339157121a9e203" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-user-create.png" />
    </Frame>

    Abra o novo usuário e clique em **Set password**. Essa senha vai em `OVERLEAF_LDAP_BIND_CREDENTIALS`:

    <div style={{ textAlign: "center" }}>
      <Frame caption="Authentik: definir a senha da conta de bind (instância de teste)">
        <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-user-page.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=96aad0f919dc8e74fef5995b1dde1e78" alt="" width="207" data-path="images/on-premises/ldap-authentik-user-page.png" />
      </Frame>
    </div>

    Anote o número do usuário na barra de endereços, por exemplo `19` em `…/#/identity/users/19`. Você precisará dele no passo 3.
  </Step>

  <Step title="Criar o provedor e a aplicação">
    Abra **Applications > Applications** e clique em **New Application**. O assistente cria a aplicação e o seu provedor ao mesmo tempo.

    1\. Dê à aplicação um nome e um slug, por exemplo `overleaf-ldap`, e clique em **Next**:

    <Frame caption="Authentik: nome e slug da aplicação">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-app.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=0d3e6b54e9bf552bd81d8b1d6b722701" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-app.png" />
    </Frame>

    2\. Escolha **LDAP Provider** e clique em **Next**:

    <Frame caption="Authentik: escolher o provedor LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-type.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ee63f2682051572a08c1f5bc321a1af6" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-type.png" />
    </Frame>

    3\. Defina **Bind Mode** como **Direct binding** e **Search Mode** como **Direct querying**:

    <Frame caption="Authentik: modo de bind e de pesquisa do provedor LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-modes.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=ea147f1605e76142021d07f775d5ef53" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-modes.png" />
    </Frame>

    4\. Mais abaixo, defina **Bind Flow** como `default-authentication-flow` e **Base DN** como o seu Base DN, por exemplo `dc=example,dc=com`:

    <Frame caption="Authentik: fluxo de bind e Base DN do provedor LDAP">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-basedn.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=4ce418571d83294ee749d56b13c63d44" alt="" width="1120" height="810" data-path="images/on-premises/ldap-authentik-basedn.png" />
    </Frame>

    5\. Clique em **Next** até a última página e envie a aplicação.
  </Step>

  <Step title="Permitir que a conta de bind pesquise o diretório">
    Sem essa permissão, a conta de bind vê apenas a si mesma, a pesquisa não encontra nenhum usuário e todo login LDAP falha.

    Abra o provedor, vá em **Permissions** e clique em **Assign Role Object Permission**. Em **Role**, digite o número do passo 1 e selecione `ak-managed-role--user-<number>`; em seguida, ative **Search full LDAP directory**:

    <Frame caption="Authentik: conceder à conta de bind a permissão de pesquisa (instância de teste)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-assign.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=5af53c691ae845adcb4ede42c24fb600" alt="" width="1120" height="529" data-path="images/on-premises/ldap-authentik-assign.png" />
    </Frame>

    A função passa então a exibir uma marca de seleção em **Search full LDAP directory**:

    <Frame caption="Authentik: permissões de um provedor LDAP (instância de teste)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-permissions.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=24ae7f0dfb6d19e1b3d6584d6ccf0f0b" alt="" width="990" height="488" data-path="images/on-premises/ldap-authentik-permissions.png" />
    </Frame>
  </Step>

  <Step title="Executar o outpost LDAP">
    O Authentik responde ao LDAP por meio de um outpost, um contêiner separado. Abra **Applications > Outposts**, crie um outpost do tipo **LDAP** com o seu provedor e implante-o conforme descrito pelo Authentik. Ele escuta na porta 389 do host em que é executado. Quando está conectado, exibe uma marca de seleção verde:

    <Frame caption="Authentik: um outpost LDAP em execução (instância de teste)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-outposts.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=cd8af2f7df7b2df24d2369416509faef" alt="" width="990" height="468" data-path="images/on-premises/ldap-authentik-outposts.png" />
    </Frame>

    ```dotenv theme={null}
    OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
    ```
  </Step>

  <Step title="Preencher os DNs">
    A página do provedor mostra o Base DN e um exemplo em **How to connect**:

    <Frame caption="Authentik: visão geral de um provedor LDAP (instância de teste)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/ldap-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=9aa4b747f4c0f51533454a97d835c18c" alt="" width="990" height="773" data-path="images/on-premises/ldap-authentik-provider.png" />
    </Frame>

    Não copie os valores do exemplo tal como estão:

    * **Bind DN** mostra a conta com a qual você está logado. Use em vez disso a conta de bind do passo 1: `cn=ldapservice,ou=users,<Base DN>`.
    * **Search base** mostra o Base DN. Use `ou=users,<Base DN>`.

    ```dotenv theme={null}
    OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
    OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
    OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
    OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
    ```

    <Warning>
      O Authentik mantém um grupo com o nome de cada usuário em `ou=virtual-groups`. Pesquisar todo o Base DN por `(cn=alice)` encontra tanto `cn=alice,ou=users,…` quanto `cn=alice,ou=virtual-groups,…`, e o Overleaf recusa um login que corresponda a mais de uma entrada. Mantenha a base de pesquisa em `ou=users,<Base DN>`.
    </Warning>
  </Step>

  <Step title="Verificar a pesquisa">
    Antes de iniciar o Overleaf, execute a pesquisa que ele fará. Ela deve imprimir exatamente um `dn:`:

    ```shell theme={null}
    ldapsearch -x -H ldap://ldap.example.com:389 \
      -D cn=ldapservice,ou=users,dc=example,dc=com -w '<password of ldapservice>' \
      -b ou=users,dc=example,dc=com '(cn=alice)' dn
    ```

    Nenhum `dn:` geralmente significa que a permissão do passo 3 está faltando.
  </Step>

  <Step title="Mapear os administradores (opcional)">
    Os grupos de um usuário estão em `memberOf`, como DNs em `ou=groups`. Para tornar os membros do grupo `Admins` do Authentik administradores do Overleaf:

    ```dotenv theme={null}
    OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
    OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
    ```

    <Warning>
      O indicador de administrador é atualizado a cada login LDAP. Com um atributo ou valor errado, todo administrador que fizer login via LDAP perde os direitos de administrador. Teste o mapeamento primeiro com uma segunda conta de administrador.
    </Warning>
  </Step>
</Steps>

<Accordion title="variables.env testado para o goauthentik">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=ldap
  OVERLEAF_LDAP_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_LDAP_URL=ldap://ldap.example.com:389
  OVERLEAF_LDAP_BIND_DN=cn=ldapservice,ou=users,dc=example,dc=com
  OVERLEAF_LDAP_BIND_CREDENTIALS=<password of ldapservice>
  OVERLEAF_LDAP_SEARCH_BASE=ou=users,dc=example,dc=com
  OVERLEAF_LDAP_SEARCH_FILTER=(cn={{username}})
  OVERLEAF_LDAP_EMAIL_ATT=mail
  OVERLEAF_LDAP_NAME_ATT=name
  OVERLEAF_LDAP_IS_ADMIN_ATT=memberOf
  OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE=cn=Admins,ou=groups,dc=example,dc=com
  OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.