> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-pro.ayaka.space/on-premises/da/konfiguration/overleaf-toolkit/authentication/ldap-authentication.md).

# LDAP-godkendelse

Denne funktion er udviklet af [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Her tilbyder vi nogle dokumenter til din konfiguration.

{% hint style="warning" %}
Overleaf bruger **passport-ldapauth** biblioteket, som er relativt forældet, kan LDAP-kompatibilitet ikke garanteres fuldt ud. Med visse LDAP-identitetsudbydere (for eksempel, <https://goauthentik.io/>), kan der opstå loginfejl. Derfor anbefales det, hvis muligt, at bruge OAuth/SAML-metoden i stedet.
{% endhint %}

### Hvad er LDAP

LDAP er en godkendelsesprotokol, der bruges til ekstern identitetsverificering. Overleaf Server Pro tilbyder en dedikeret LDAP-loginformular i webgrænsefladen, adskilt fra den standard godkendelsesmetode. Når en bruger indsender sit LDAP-brugernavn og sin adgangskode, verificerer Overleaf-backenden legitimationsoplysningerne mod den konfigurerede LDAP-server, for eksempel `ldap://ldap:10389`.

<figure><img src="/files/c415d79c988237e9343e9b492c16742d69f0f143" alt=""><figcaption><p>Et Server Pro-eksempel på LDAP</p></figcaption></figure>

### Konfiguration

Internt bruger Overleaf LDAP [passport-ldapauth](https://github.com/vesse/passport-ldapauth) biblioteket. De fleste af disse konfigurationsmuligheder sendes videre til `server` config-objektet, som bruges til at konfigurere `passport-ldapauth`. Hvis du har problemer med at konfigurere LDAP, kan det betale sig at læse README'en for `passport-ldapauth` for at få en fornemmelse af den konfiguration, den forventer.

Miljøvariablen `EXTERNAL_AUTH` er påkrævet for at aktivere LDAP-godkendelsesmodulet. Denne miljøvariabel angiver, hvilke eksterne godkendelsesmetoder der er aktiveret. Værdien af denne variabel er en liste. Hvis listen inkluderer `ldap` vil LDAP-godkendelse blive aktiveret.

For eksempel: `EXTERNAL_AUTH=ldap saml`

I modsætning til Overleaf CEP begrænser vi i vores ayaka-notes-udgave LDAP-godkendelse til en ren godkendelsesmetode, som er tilgængelig på `http://your-overleaf.com/ldap/login`.

Når man bruger LDAP-godkendelsesmetoder, indtaster en bruger et `brugernavn` og `adgangskode` i loginformularen, forsøges:

1. Der søges efter en LDAP-bruger i LDAP-kataloget ved hjælp af filteret defineret af `OVERLEAF_LDAP_SEARCH_FILTER` og godkendes.
2. Hvis godkendelsen lykkes, kontrolleres Overleafs brugerdatabase for en bruger med den primære e-mailadresse, der matcher e-mailadressen for den godkendte LDAP-bruger:
   * Hvis der findes en matchende bruger, `hashedPassword` feltet for denne bruger slettes (hvis det findes). Dette sikrer, at brugeren kun kan logge ind via LDAP-godkendelse i fremtiden.
   * Hvis der ikke findes nogen matchende bruger, oprettes en ny Overleaf-bruger ved hjælp af e-mailen, fornavnet og efternavnet hentet fra LDAP-serveren.

{% hint style="danger" %}
For brugere, der logger ind via LDAP, gemmer vi ikke (eller fjerner eksisterende) hashede adgangskoder i Overleafs Mongo-database.
{% endhint %}

#### Miljøvariabler

* `OVERLEAF_LDAP_URL` **(påkrævet)**
  * URL-adressen til LDAP-serveren.
    * Eksempel: `ldaps://ldap.example.com:636` (LDAP over SSL)
    * Eksempel: `ldap://ldap.example.com:389` (ukrypteret eller STARTTLS, hvis konfigureret).
* `OVERLEAF_LDAP_IDENTITY_SERVICE_NAME`
  * Visningsnavn for LDAP-identitetstjenesten, der bruges på login-siden.
  * Som standard `Log ind med LDAP-udbyder`.
* `OVERLEAF_LDAP_EMAIL_ATT`
  * Den e-mail-attribut, som returneres af LDAP-serveren, standard `mail`. Hver LDAP-bruger skal have mindst én e-mailadresse. Hvis der angives flere adresser, bruges kun den første.
* `OVERLEAF_LDAP_FIRST_NAME_ATT`
  * Navnet på den egenskab, der indeholder brugerens fornavn, som bruges i applikationen, normalt `givenName`.
* `OVERLEAF_LDAP_LAST_NAME_ATT`
  * Navnet på den egenskab, der indeholder brugerens efternavn, som bruges i applikationen, normalt `sn`.
* `OVERLEAF_LDAP_NAME_ATT`
  * Navnet på den egenskab, der indeholder brugerens fulde navn, normalt `cn`. Hvis en af de to foregående variabler ikke er defineret, udtrækkes brugerens fornavn og/eller efternavn fra denne variabel. Ellers bruges den ikke.
* `OVERLEAF_LDAP_PLACEHOLDER`
  * Pladsholderen til loginformularen, standard er `Brugernavn`.
* `OVERLEAF_LDAP_UPDATE_USER_DETAILS_ON_LOGIN`
  * Hvis sat til `true`, opdaterer LDAP-brugerens `first_name` og `last_name` felt ved login og slår brugeroplysningsformularen fra på `/user/settings` siden for LDAP-brugere. Ellers hentes oplysninger kun ved første login.
* `OVERLEAF_LDAP_BIND_DN`
  * Det distinkte navn på den LDAP-bruger, der skal bruges til LDAP-forbindelsen (denne bruger skal kunne søge/listes konti på LDAP-serveren), f.eks. `cn=ldap_reader,dc=example,dc=com`. Hvis ikke defineret, bruges anonym binding.
* `OVERLEAF_LDAP_BIND_CREDENTIALS`
  * Adgangskode til `OVERLEAF_LDAP_BIND_DN`.
* `OVERLEAF_LDAP_BIND_PROPERTY`
  * Egenskaben for den bruger, der skal bindes mod klienten, standard er `dn`.
* `OVERLEAF_LDAP_SEARCH_BASE` **(påkrævet)**
  * Det base-DN, hvorfra der skal søges efter brugere. F.eks. `ou=people,dc=example,dc=com`.
* `OVERLEAF_LDAP_SEARCH_FILTER`
  * LDAP-søgefilter, som en bruger kan findes med. Brug den bogstavelige '{{username}}' for at få det givne brugernavn indsat i LDAP-søgningen.
    * Eksempel: `(|(uid={{username}})(mail={{username}}))` (brugeren kan logge ind med e-mail eller med login-navn).
    * Eksempel: `(sAMAccountName={{username}})` (Active Directory).
* `OVERLEAF_LDAP_SEARCH_SCOPE`
  * Søgefeltet kan være `base`, `én`, eller `sub` (standard).
* `OVERLEAF_LDAP_SEARCH_ATTRIBUTES`
  * JSON-array af attributter, der skal hentes fra LDAP-serveren, f.eks. `["uid", "mail", "givenName", "sn"]`. Som standard hentes alle attributter.
* `OVERLEAF_LDAP_STARTTLS`
  * Hvis `true`, bruges LDAP over TLS.
* `OVERLEAF_LDAP_TLS_OPTS_CA_PATH`
  * Sti til filen, der indeholder CA-certifikatet, som bruges til at verificere LDAP-serverens SSL/TLS-certifikat. Hvis der er flere certifikater, kan det være et JSON-array af stier til certifikaterne. Filerne skal være tilgængelige for Docker-containeren.
    * Eksempel (ét certifikat): `/var/lib/overleaf/certs/ldap_ca_cert.pem`
    * Eksempel (flere certifikater): `["/var/lib/overleaf/certs/ldap_ca_cert1.pem", "/var/lib/overleaf/certs/ldap_ca_cert2.pem"]`
* `OVERLEAF_LDAP_TLS_OPTS_REJECT_UNAUTH`
  * Hvis `true`, verificeres servercertifikatet mod listen over angivne CA'er.
* `OVERLEAF_LDAP_CACHE`
  * Hvis `true`, vil op til 100 legitimationsoplysninger ad gangen blive cachet i 5 minutter.
* `OVERLEAF_LDAP_TIMEOUT`
  * Hvor længe klienten skal lade operationer køre, før der timeoutes, ms (standard: Infinity).
* `OVERLEAF_LDAP_CONNECT_TIMEOUT`
  * Hvor længe klienten skal vente, før der opstår timeout på TCP-forbindelser, ms (standard: OS-standard).
* `OVERLEAF_LDAP_IS_ADMIN_ATT` og `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`
  * Når begge miljøvariabler er angivet, opdaterer loginprocessen `user.isAdmin = true` hvis LDAP-profilen indeholder den attribut, der er angivet af `OVERLEAF_LDAP_IS_ADMIN_ATT` og dens værdi enten matcher `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE` eller er et array, der indeholder `OVERLEAF_LDAP_IS_ADMIN_ATT_VALUE`, ellers `user.isAdmin` sættes til `false`. Hvis en af disse variabler ikke er angivet, sættes administratorstatus kun til `true` under oprettelsen af adminbrugeren i Launchpad.

De følgende fem variabler bruges til at konfigurere, hvordan bruger-kontakter hentes fra LDAP-serveren.

* `OVERLEAF_LDAP_CONTACTS_FILTER`
  * Det filter, der bruges til at søge efter brugere på LDAP-serveren, som skal indlæses i kontakter. Pladsholderen '{{userProperty}}' i filteret erstattes med værdien af den egenskab, der er angivet af `OVERLEAF_LDAP_CONTACTS_PROPERTY` fra den LDAP-bruger, der starter søgningen. Hvis ikke defineret, hentes ingen brugere fra LDAP-serveren til kontakter.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_BASE`
  * Angiver det base-DN, hvorfra søgningen efter kontakter skal starte. Standard er `OVERLEAF_LDAP_SEARCH_BASE`.
* `OVERLEAF_LDAP_CONTACTS_SEARCH_SCOPE`
  * Søgefeltet kan være `base`, `én`, eller `sub` (standard).
* `OVERLEAF_LDAP_CONTACTS_PROPERTY`
  * Angiver egenskaben for brugerobjektet, som erstatter '{{userProperty}}'-pladsholderen i `OVERLEAF_LDAP_CONTACTS_FILTER`.
* `OVERLEAF_LDAP_CONTACTS_NON_LDAP_VALUE`
  * Angiver værdien af `OVERLEAF_LDAP_CONTACTS_PROPERTY` hvis søgningen initieres af en ikke-LDAP-bruger. Hvis denne variabel ikke er defineret, vil det resulterende filter matche ingenting. Værdien `*` kan bruges som jokertegn.

<details>

<summary><strong>Eksempel</strong></summary>

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

Ovenstående eksempel medfører, at alle LDAP-brugere, der har den samme UNIX- `gid`. Ikke-LDAP-brugere vil have alle LDAP-brugere med UNIX- `gid=1000` i deres kontakter.

</details>

<details>

<summary><strong>Eksempel på variables.env-fil</strong></summary>

```
OVERLEAF_APP_NAME="Vores Overleaf-instans"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Aktiverer generering af miniaturebilleder ved hjælp af ImageMagick
ENABLE_CONVERSIONS=true

# Deaktiverer kravet om e-mailbekræftelse
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Angiv 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": "Kontakt dit supportteam", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Hej, jeg er til højre", "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=Dette system drives af afdeling x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## LDAP til 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='Brugernavn eller e-mailadresse'

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://overleaf-pro.ayaka.space/on-premises/da/konfiguration/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.
