> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/on-premises/pt/configuracao/overleaf-toolkit/authentication/ldap-authentication.md).

# Autenticação LDAP

Esta funcionalidade foi desenvolvida por [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Aqui oferecemos alguns documentos para a sua configuração.

{% hint style="warning" %}
O Overleaf usa o **passport-ldapauth** biblioteca, que é relativamente desatualizada, a compatibilidade com LDAP não pode ser totalmente garantida. Com determinados provedores de identidade LDAP (por exemplo, <https://goauthentik.io/>), podem ocorrer falhas de início de sessão. Portanto, se possível, recomenda-se usar OAuth/SAML antes.
{% endhint %}

### O que é LDAP

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

<figure><img src="/files/7418034988b7fb7f8433a85d77ef65231e8973e8" alt=""><figcaption><p>Um exemplo do Server Pro para LDAP</p></figcaption></figure>

### Configuração

Internamente, o LDAP do Overleaf usa a [passport-ldapauth](https://github.com/vesse/passport-ldapauth) biblioteca. A maioria dessas opções de configuração é passada para o `servidor` objeto de configuração usado para configurar `passport-ldapauth`. Se estiver a ter problemas para configurar o LDAP, vale a pena ler o README de `passport-ldapauth` para ter uma ideia da configuração que ele espera.

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

Por exemplo: `EXTERNAL_AUTH=ldap saml`

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

Ao usar métodos de autenticação LDAP, um usuário insere um `nome de usuário` e `senha` no formulário de login, tenta-se:

1. Um usuário LDAP é pesquisado no diretório LDAP usando o filtro definido por `OVERLEAF_LDAP_SEARCH_FILTER` e autenticado.
2. Se a autenticação for bem-sucedida, é verificada na base de dados de utilizadores do Overleaf a existência de um utilizador com o endereço de e-mail principal correspondente ao endereço de e-mail do utilizador LDAP autenticado:
   * Se for encontrado um utilizador correspondente, o `hashedPassword` campo deste utilizador é apagado (se existir). Isso garante que o utilizador só possa iniciar sessão via autenticação LDAP no futuro.
   * Se nenhum utilizador correspondente for encontrado, é criado um novo utilizador do Overleaf usando o e-mail, o primeiro nome e o apelido obtidos do servidor LDAP.

{% hint style="danger" %}
Para os utilizadores que iniciam sessão via LDAP, não armazenamos (nem removemos, se existirem) palavras-passe com hash na base de dados Mongo do Overleaf.
{% endhint %}

#### Variáveis de ambiente

* `OVERLEAF_LDAP_URL` **(obrigatório)**
  * URL do servidor LDAP.
    * Exemplo: `ldaps://ldap.example.com:636` (LDAP sobre SSL)
    * Exemplo: `ldap://ldap.example.com:389` (não encriptado 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.
  * O padrão é `Iniciar sessão com o provedor LDAP`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * O atributo de e-mail devolvido pelo servidor LDAP, por padrão `mail`. Cada utilizador LDAP deve ter pelo menos um endereço de e-mail. Se forem fornecidos vários endereços, apenas o primeiro será usado.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * O nome da propriedade que contém o primeiro nome do utilizador usado na aplicação, normalmente `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * O nome da propriedade que contém o apelido do utilizador usado na aplicação, normalmente `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * O nome da propriedade que contém o nome completo do utilizador, normalmente `cn`. Se qualquer uma das duas variáveis anteriores não estiver definida, o primeiro nome e/ou apelido do utilizador é extraído desta variável. Caso contrário, não é usada.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * O texto de espaço reservado do formulário de login, por padrão `Nome de utilizador`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se definido como `true`, atualiza o utilizador LDAP `first_name` e `last_name` campo no momento do login e desativa o formulário de detalhes do utilizador na `/user/settings` página para utilizadores LDAP. Caso contrário, os detalhes serão obtidos apenas no primeiro início de sessão.
* `OVERLEAF_LDAP_BIND_DN`
  * O nome distinto do utilizador LDAP que deve ser usado para a ligação LDAP (este utilizador deve ser capaz de pesquisar/listar contas no servidor LDAP), por exemplo, `cn=ldap_reader,dc=example,dc=com`. Se não estiver definido, é usada ligação anónima.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Palavra-passe para `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Propriedade do utilizador a associar ao cliente, por padrão `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(obrigatório)**
  * O DN base a partir do qual pesquisar utilizadores. Por exemplo, `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * Filtro de pesquisa LDAP com o qual encontrar um utilizador. Use o literal '{{username}}' para interpolar o nome de utilizador fornecido na pesquisa LDAP.
    * Exemplo: `(|(uid={{username}})(mail={{username}}))` (o utilizador pode iniciar sessão com e-mail ou com nome de login).
    * Exemplo: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * O escopo da pesquisa pode ser `base`, `um`, ou `sub` (padrão).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * Matriz JSON de atributos a obter 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 ficheiro que contém o certificado CA usado para verificar o certificado SSL/TLS do servidor LDAP. Se houver vários certificados, então pode ser uma matriz JSON de caminhos para os certificados. Os ficheiros devem estar acessíveis ao contentor 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`, então até 100 credenciais de cada vez serão armazenadas em cache durante 5 minutos.
* `OVERLEAF_LDAP_TIMEOUT`
  * Durante quanto tempo o cliente deve permitir que as operações decorram antes de esgotar o tempo, ms (Padrão: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Durante quanto tempo o cliente deve esperar antes de esgotar o tempo nas ligações TCP, ms (Padrão: predefiniçã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 o respetivo valor corresponde a `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` ou é uma matriz que contém `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, caso contrário `user.isAdmin` é definido como `false`. Se qualquer uma destas variáveis não estiver definida, então o estado de administrador só é definido como `true` durante a criação do utilizador administrador no Launchpad.

As cinco variáveis seguintes são usadas para configurar como os contactos dos utilizadores são obtidos do servidor LDAP.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * O filtro usado para pesquisar utilizadores no servidor LDAP a serem carregados nos contactos. O marcador de posição '{{userProperty}}' dentro do filtro é substituído pelo valor da propriedade especificada por `OVERLEAF_LDAP_CONTACTS_PROPERTY` do utilizador LDAP que iniciou a pesquisa. Se não estiver definida, nenhum utilizador é obtido do servidor LDAP para os contactos.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Especifica o DN base a partir do qual começar a pesquisar os contactos. O padrão é `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * O escopo da pesquisa pode ser `base`, `um`, ou `sub` (padrão).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Especifica a propriedade do objeto utilizador que substituirá o marcador de posição '{{userProperty}}' no `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Especifica o valor de `OVERLEAF_LDAP_CONTACTS_PROPERTY` se a pesquisa for iniciada por um utilizador 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 um caráter universal.

<details>

<summary><strong>Exemplo</strong></summary>

```
OVERLEAF_LDAP_CONTACTS_FILTER=(gidNumber={{userProperty}})
OVERLEAF_LDAP_CONTACTS_PROPERTY=gidNumber
OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE=1000
```

O exemplo acima resulta no carregamento, nos contactos do utilizador LDAP atual, de todos os utilizadores LDAP que têm o mesmo UNIX `gid`. Os utilizadores não LDAP terão todos os utilizadores LDAP com UNIX `gid=1000` nos seus contactos.

</details>

<details>

<summary><strong>Exemplo de ficheiro variables.env</strong></summary>

```
OVERLEAF_APP_NAME="Our Overleaf Instance"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Ativa a geração de miniaturas usando ImageMagick
ENABLE_CONVERSIONS=true

# Desativa a exigência de confirmação por e-mail
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Definir para TLS via nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

OVERLEAF_SITE_URL=http://my-overleaf-instance.com
OVERLEAF_NAV_TITLE=Nossa instância Overleaf
# OVERLEAF_HEADER_IMAGE_URL=http://somewhere.com/mylogo.png
OVERLEAF_ADMIN_EMAIL=support@example.com

OVERLEAF_LEFT_FOOTER=[{"text": "Contacte a sua equipa de suporte", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Olá, estou à direita", "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=Este sistema é gerido pelo departamento x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP para 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='Nome de utilizador ou endereço de e-mail'

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='*'
```

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/on-premises/pt/configuracao/overleaf-toolkit/authentication/ldap-authentication.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
