> ## 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.

# OIDC-autentisering

<Info>
  Denne funksjonen er utviklet av [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Her tilbyr vi litt dokumentasjon for konfigurasjonen din.
</Info>

### Konfigurasjon

Internt bruker OIDC-modulen i Overleaf biblioteket [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect). Hvis du har problemer med å konfigurere OpenID Connect, er det lurt å lese README-filen for `passport-openidconnect` for å få et inntrykk av hvilken konfigurasjon den forventer.

Miljøvariabelen `EXTERNAL_AUTH` er påkrevd for å aktivere OIDC-autentiseringsmodulen. Denne miljøvariabelen angir hvilke eksterne autentiseringsmetoder som er aktivert. Verdien av variabelen er en liste. Hvis listen inneholder `oidc`, aktiveres OIDC-autentisering.

For eksempel: `EXTERNAL_AUTH=ldap oidc`

Når OIDC-autentiseringsmetoden brukes, blir brukeren omdirigert til autentiseringssiden til identitetsleverandøren (IdP). Hvis IdP-en autentiserer brukeren, søkes det i Overleafs brukerdatabase etter en post som inneholder et `thirdPartyIdentifiers`-felt med følgende struktur:

```text theme={null}
thirdPartyIdentifiers: [
  {
    externalUserId: "...",
    externalData: null,
    providerId: "..."
  }
]
```

`externalUserId` må samsvare med bruker-ID-en i profilen som returneres av IdP-serveren (se miljøvariabelen `OVERLEAF_OIDC_USER_ID_FIELD`), og `providerId` må samsvare med ID-en til OIDC-leverandøren (se `OVERLEAF_OIDC_PROVIDER_ID`).

Hvis ingen samsvarende post blir funnet, søkes det i databasen etter en bruker med en primær e-postadresse som samsvarer med e-postadressen i brukerprofilen fra IdP-en:

* Hvis en slik bruker blir funnet, oppdateres feltet `thirdPartyIdentifiers`.
* Hvis ingen samsvarende bruker blir funnet og JIT-opprettelse av kontoer ikke er deaktivert, opprettes en ny bruker med e-postadressen og `thirdPartyIdentifiers` fra IdP-profilen.

I begge tilfeller sies brukeren å være «koblet» til den eksterne OIDC-brukeren. Brukeren kan kobles fra OIDC-leverandøren på siden `/user/settings`.

#### Finne verdiene med discovery-dokumentet

Hver OpenID-leverandør (OP) publiserer et discovery-dokument på `<issuer>/.well-known/openid-configuration`. Kopier verdiene derfra i stedet for å skrive dem inn for hånd; ett feil tegn er nok til at innloggingen slutter å fungere.

<Steps>
  <Step title="Finn discovery-URL-en">
    OP-en din viser den på siden til klienten (leverandøren) du opprettet for Overleaf. I Authentik åpner du **Applications > Providers**, velger leverandøren og ser etter **OpenID Configuration URL** og **OpenID Configuration Issuer**:

    <Frame caption="Authentik: discovery-URL-en og utstederen til en leverandør (testinstans)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-provider.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=e3cb5603d959665472b53e39b58b2775" alt="" width="1280" height="633" data-path="images/on-premises/oidc-authentik-provider.png" />
    </Frame>

    URL-en ser vanligvis slik ut:

    * Keycloak: `https://keycloak.example.com/realms/<realm>/.well-known/openid-configuration`
    * Authentik: `https://authentik.example.com/application/o/<application-slug>/.well-known/openid-configuration`
  </Step>

  <Step title="Les av verdiene">
    Åpne URL-en i en nettleser, eller kjør følgende på Overleaf-serveren:

    ```shell theme={null}
    curl -s https://authentik.example.com/application/o/overleaf/.well-known/openid-configuration \
      | jq '{issuer, authorization_endpoint, token_endpoint, userinfo_endpoint, end_session_endpoint}'
    ```

    Svaret fra Authentik ser slik ut:

    ```json theme={null}
    {
      "issuer": "https://authentik.example.com/application/o/overleaf/",
      "authorization_endpoint": "https://authentik.example.com/application/o/authorize/",
      "token_endpoint": "https://authentik.example.com/application/o/token/",
      "userinfo_endpoint": "https://authentik.example.com/application/o/userinfo/",
      "end_session_endpoint": "https://authentik.example.com/application/o/overleaf/end-session/"
    }
    ```

    Authentik viser også disse URL-ene lenger ned på leverandørsiden:

    <Frame caption="Authentik: endepunktene til en leverandør (testinstans)">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-endpoints.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=55d130cbbbf27fd11aebafa1ab3f090c" alt="" width="1280" height="633" data-path="images/on-premises/oidc-authentik-endpoints.png" />
    </Frame>
  </Step>

  <Step title="Kopier dem inn i `variables.env`">
    | Felt i discovery-dokumentet | Miljøvariabel |
    | - | - |
    | `issuer` | `OVERLEAF_OIDC_ISSUER` |
    | `authorization_endpoint` | `OVERLEAF_OIDC_AUTHORIZATION_URL` |
    | `token_endpoint` | `OVERLEAF_OIDC_TOKEN_URL` |
    | `userinfo_endpoint` | `OVERLEAF_OIDC_USER_INFO_URL` |
    | `end_session_endpoint` | `OVERLEAF_OIDC_LOGOUT_URL` |

    ```dotenv theme={null}
    OVERLEAF_OIDC_ISSUER=https://authentik.example.com/application/o/overleaf/
    OVERLEAF_OIDC_AUTHORIZATION_URL=https://authentik.example.com/application/o/authorize/
    OVERLEAF_OIDC_TOKEN_URL=https://authentik.example.com/application/o/token/
    OVERLEAF_OIDC_USER_INFO_URL=https://authentik.example.com/application/o/userinfo/
    OVERLEAF_OIDC_LOGOUT_URL=https://authentik.example.com/application/o/overleaf/end-session/
    ```
  </Step>

  <Step title="Kontroller at Overleaf kan nå OP-en">
    Overleaf kaller token- og userinfo-endepunktene fra innsiden av containeren sin, så OP-en må kunne nås derfra, ikke bare fra nettleseren din:

    ```shell theme={null}
    docker exec sharelatex curl -sS -o /dev/null -w "%{http_code}\n" \
      https://authentik.example.com/application/o/overleaf/.well-known/openid-configuration
    ```

    Den skal skrive ut `200`.
  </Step>
</Steps>

<Warning>
  Kopier `issuer` nøyaktig, inkludert den avsluttende skråstreken. Overleaf sammenligner den tegn for tegn med utstederen i ID-tokenet; enhver forskjell gjør at alle OIDC-innlogginger mislykkes med:

  `{"message":{"message":"ID token not issued by expected OpenID provider."}}`

  I Authentik hører utstederen til applikasjonen (`.../application/o/<application-slug>/`). Den er ikke adressen til Authentik-serveren, selv om authorize-, token- og userinfo-URL-ene deles av alle applikasjoner.
</Warning>

#### Miljøvariabler

Verdiene for de følgende fem påkrevde variablene finner du via endepunktet `.well-known/openid-configuration` hos OpenID-leverandøren (OP) din, se ovenfor.

* `OVERLEAF_OIDC_ISSUER` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_AUTHORIZATION_URL` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_TOKEN_URL` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_USER_INFO_URL` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_LOGOUT_URL` <strong>(påkrevd)</strong>

Verdiene for de følgende to påkrevde variablene får du fra administratoren av OP-en din

* `OVERLEAF_OIDC_CLIENT_ID` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_CLIENT_SECRET` <strong>(påkrevd)</strong>
* `OVERLEAF_OIDC_SCOPE`
  * Standard: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * Vilkårlig ID for OP-en, standard er `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Navnet på OP-en, brukt i delen `Linked Accounts` på siden `/user/settings`, standard er `OIDC Provider`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Visningsnavn for identitetstjenesten, brukt på innloggingssiden (standard: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Beskrivelse av OP-en, brukt i delen `Linked Accounts` (standard: `Log in with $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Learn more`-URL i beskrivelsen av OP-en; standard: ingen `Learn more`-lenke i beskrivelsen.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Ikke vis OP-en på siden `/user/settings` hvis brukerens konto ikke er koblet til OP-en; standard `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Verdien av dette attributtet brukes av Overleaf som ekstern bruker-ID; standard er `id`. Andre mulige fornuftige verdier er `email` og `username` (tilsvarer OIDC-claimet `preferred_username`).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Begrenser Just-in-Time-opprettelse (JIT) av kontoer for brukere som autentiserer seg via OIDC. Hvis den er satt til en kommaseparert liste med domenenavn, opprettes en ny konto bare hvis domenet i brukerens e-postadresse samsvarer med et av domenene i listen. Hvis domenet ikke samsvarer, må en administrator opprette brukerkontoen manuelt med OIDC-brukerens e-postadresse, enten med et sterkt tilfeldig passord eller helst helt uten feltet `hashedPassword`. Domenenavn kan begynne med jokertegnet `*.` for å samsvare med underdomener.
    * Eksempel: For å tillate JIT-opprettelse av kontoer for brukere med e-postadresser som `name@example.com` og `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Eksempel: For å deaktivere JIT-opprettelse av kontoer fullstendig:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Hvis den er satt til `true`, oppdateres brukerens felt `first_name` og `last_name` ved innlogging, og skjemaet for brukeropplysninger på siden `/user/settings` deaktiveres.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` og `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Når begge miljøvariablene er satt, oppdaterer innloggingsprosessen `user.isAdmin = true` hvis profilen som returneres av OP-en, inneholder attributtet angitt av `OVERLEAF_OIDC_IS_ADMIN_FIELD` og verdien enten samsvarer med `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE` eller er en matrise som inneholder `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE` (for eksempel `groups`-claimet); ellers settes `user.isAdmin` til `false`. Hvis `OVERLEAF_OIDC_IS_ADMIN_FIELD` er `email`, brukes verdien av attributtet `emails[0].value` til samsvarskontrollen.

Omdirigerings-URL-en for OpenID-leverandøren din er `https://my-overleaf-instance.com/oidc/login/callback`.

<Accordion title="Eksempel på variables.env-fil">
  ```dotenv title="variables.env" wrap 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

  #################
  ## OIDC for CE ##
  #################

  EXTERNAL_AUTH=oidc

  OVERLEAF_OIDC_PROVIDER_ID=oidc
  OVERLEAF_OIDC_ISSUER=https://keycloak.provider.com/realms/example
  OVERLEAF_OIDC_AUTHORIZATION_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/auth
  OVERLEAF_OIDC_TOKEN_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/token
  OVERLEAF_OIDC_USER_INFO_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/userinfo
  OVERLEAF_OIDC_LOGOUT_URL=https://keycloak.provider.com/realms/example/protocol/openid-connect/logout
  OVERLEAF_OIDC_CLIENT_ID=Overleaf-OIDC
  OVERLEAF_OIDC_CLIENT_SECRET=DoNotUseThisATGgaAcTgCcATgGATTACAagGtTCaGcGTAG
  OVERLEAF_OIDC_IDENTITY_SERVICE_NAME='Log in with Keycloak OIDC Provider'
  OVERLEAF_OIDC_PROVIDER_NAME=OIDC Keycloak Provider
  OVERLEAF_OIDC_PROVIDER_INFO_LINK=https://openid.net
  OVERLEAF_OIDC_IS_ADMIN_FIELD=email
  OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=overleaf.admin@example.com
  OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=false
  ```
</Accordion>

## Trinn for trinn: goauthentik

Dette er en gjennomgang av et oppsett som er testet mot [goauthentik](https://goauthentik.io/). Erstatt `https://overleaf.example.com` med din `OVERLEAF_SITE_URL` og `https://authentik.example.com` med adressen til din Authentik.

<Steps>
  <Step title="Opprett leverandøren">
    I Authentik åpner du **Applications > Providers**, klikker **New Provider**, velger **OAuth2/OpenID Provider** og klikker **Next**.

    * **Client Type**: `Confidential`.
    * **Redirect URIs** (under **Protocol settings**): legg til `https://overleaf.example.com/oidc/login/callback` med samsvarsmodusen `Strict`.
    * Kopier **Client ID** og **Client Secret** nå, inn i `OVERLEAF_OIDC_CLIENT_ID` og `OVERLEAF_OIDC_CLIENT_SECRET`.

    <Frame caption="Authentik: Client ID og Client Secret for en ny leverandør">
      <img src="https://mintcdn.com/ayakaleaf-pro/TjqwH4XzxYAkHStq/images/on-premises/oidc-authentik-create.png?fit=max&auto=format&n=TjqwH4XzxYAkHStq&q=85&s=f127a92eaf3063714e9af515fe97c263" alt="" width="1120" height="808" data-path="images/on-premises/oidc-authentik-create.png" />
    </Frame>

    <Warning>
      Authentik viser klienthemmeligheten bare mens du oppretter leverandøren. Senere tilbyr redigeringsskjemaet bare **Modify**, som erstatter hemmeligheten med en ny.
    </Warning>
  </Step>

  <Step title="Opprett applikasjonen">
    Åpne **Applications > Applications**, opprett en ny applikasjon, gi den et navn og en slug, for eksempel `overleaf`, og velg leverandøren. Slugen blir en del av utstederen: `https://authentik.example.com/application/o/overleaf/`.
  </Step>

  <Step title="Kopier URL-ene">
    Følg [Finne verdiene med discovery-dokumentet](#finne-verdiene-med-discovery-dokumentet) ovenfor for å fylle inn de fem URL-ene.
  </Step>

  <Step title="Tilordne administratorene (valgfritt)">
    Authentik sender brukerens grupper som `groups`-claimet, en matrise. Slik gjør du medlemmene av Authentik-gruppen `Admins` til administratorer i Overleaf:

    ```dotenv theme={null}
    OVERLEAF_OIDC_IS_ADMIN_FIELD=groups
    OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=Admins
    ```

    <Warning>
      Administratorflagget oppdateres ved hver OIDC-innlogging. Med feil felt eller verdi mister alle administratorer som logger inn via OIDC administratorrettighetene, inkludert administratoren som ble opprettet i launchpad. Test tilordningen med en ekstra administratorkonto først.
    </Warning>
  </Step>
</Steps>

<Accordion title="Testet variables.env for goauthentik">
  ```dotenv title="variables.env" wrap theme={null}
  EXTERNAL_AUTH=oidc
  OVERLEAF_OIDC_PROVIDER_ID=authentik
  OVERLEAF_OIDC_IDENTITY_SERVICE_NAME=Log in with Authentik
  OVERLEAF_OIDC_ISSUER=https://authentik.example.com/application/o/overleaf/
  OVERLEAF_OIDC_AUTHORIZATION_URL=https://authentik.example.com/application/o/authorize/
  OVERLEAF_OIDC_TOKEN_URL=https://authentik.example.com/application/o/token/
  OVERLEAF_OIDC_USER_INFO_URL=https://authentik.example.com/application/o/userinfo/
  OVERLEAF_OIDC_LOGOUT_URL=https://authentik.example.com/application/o/overleaf/end-session/
  OVERLEAF_OIDC_CLIENT_ID=<Client ID>
  OVERLEAF_OIDC_CLIENT_SECRET=<Client Secret>
  OVERLEAF_OIDC_USER_ID_FIELD=username
  OVERLEAF_OIDC_IS_ADMIN_FIELD=groups
  OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE=Admins
  OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN=true
  ```
</Accordion>


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