> 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/pl/konfiguracja/overleaf-toolkit/authentication/oidc-authentication.md).

# Uwierzytelnianie OIDC

Ta funkcja jest rozwijana przez [yu-i-i/overleaf-cep](https://github.com/yu-i-i/overleaf-cep). Oto oferujemy kilka dokumentów do Twojej konfiguracji.

### Konfiguracja

Wewnętrznie moduł OIDC Overleaf używa [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) biblioteki. Jeśli masz problemy z konfiguracją OpenID Connect, warto przeczytać plik README dla `passport-openidconnect` aby wyczuć, jakiej konfiguracji oczekuje.

Zmienna środowiskowa `EXTERNAL_AUTH` jest wymagane, aby włączyć moduł uwierzytelniania OIDC. Ta zmienna środowiskowa określa, które zewnętrzne metody uwierzytelniania są aktywowane. Wartość tej zmiennej jest listą. Jeśli lista zawiera `oidc` wtedy uwierzytelnianie OIDC zostanie aktywowane.

Na przykład: `EXTERNAL_AUTH=ldap oidc`

Podczas korzystania z metody uwierzytelniania OIDC użytkownik jest przekierowywany na stronę uwierzytelniania dostawcy tożsamości (IdP). Jeśli IdP pomyślnie uwierzytelni użytkownika, w bazie danych użytkowników Overleaf wyszukiwany jest rekord zawierający `thirdPartyIdentifiers` pole o następującej strukturze:

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

Ta `externalUserId` musi odpowiadać identyfikatorowi użytkownika w profilu zwróconym przez serwer IdP (zob. `OVERLEAF_OIDC_USER_ID_FIELD` zmienna środowiskowa), a `providerId` musi odpowiadać identyfikatorowi dostawcy OIDC (zob. `OVERLEAF_OIDC_PROVIDER_ID`).

Jeśli nie zostanie znaleziony pasujący rekord, w bazie danych wyszukiwany jest użytkownik, którego główny adres e-mail odpowiada adresowi e-mail w profilu użytkownika IdP:

* Jeśli taki użytkownik zostanie znaleziony, pole `thirdPartyIdentifiers` zostaje zaktualizowane.
* Jeśli nie zostanie znaleziony pasujący użytkownik, a tworzenie konta JIT nie jest wyłączone, nowy użytkownik jest tworzony z adresem e-mail i `thirdPartyIdentifiers` z profilu IdP.

W obu przypadkach mówi się, że użytkownik jest „powiązany” z zewnętrznym użytkownikiem OIDC. Użytkownik może zostać odłączony od dostawcy OIDC na `/user/settings` stronie.

#### Zmienne środowiskowe

Wartości następujących pięciu wymaganych zmiennych można znaleźć za pomocą `.well-known/openid-configuration` punktu końcowego Twojego dostawcy OpenID (OP).

* `OVERLEAF_OIDC_ISSUER` **(wymagane)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(wymagane)**
* `OVERLEAF_OIDC_TOKEN_URL` **(wymagane)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(wymagane)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(wymagane)**

Wartości następujących dwóch wymaganych zmiennych zostaną podane przez administratora Twojego OP

* `OVERLEAF_OIDC_CLIENT_ID` **(wymagane)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(wymagane)**
* `OVERLEAF_OIDC_SCOPE`
  * Domyślnie: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * Dowolny identyfikator OP, domyślnie `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * Nazwa OP, używana na stronie `Połączone konta` sekcji `/user/settings` stronie, domyślnie `Dostawca OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nazwa wyświetlana usługi tożsamości, używana na stronie logowania (domyślnie: `Zaloguj się przy użyciu $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Opis OP, używany w `Połączone konta` sekcji (domyślnie: `Zaloguj się przy użyciu $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Dowiedz się więcej` Adres URL w opisie OP, domyślnie: brak `Dowiedz się więcej` linku w opisie.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Nie pokazuj OP na `/user/settings` stronie, jeśli konto użytkownika nie jest powiązane z OP, domyślnie `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * Wartość tego atrybutu będzie używana przez Overleaf jako zewnętrzny identyfikator użytkownika, domyślnie `id`. Innymi możliwymi sensownymi wartościami są `email` i `nazwę użytkownika` (odpowiadające `preferred_username` deklaracji OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Ogranicza tworzenie konta Just-in-Time (JIT) dla użytkowników uwierzytelniających się przez OIDC. Jeśli ustawione na listę nazw domen rozdzielonych przecinkami, nowe konto zostanie utworzone tylko wtedy, gdy domena adresu e-mail użytkownika będzie zgodna z jedną z wymienionych domen. Jeśli domena nie pasuje, administrator musi ręcznie utworzyć konto użytkownika, używając adresu e-mail użytkownika OIDC, z silnym losowym hasłem albo, najlepiej, bez `hashedPassword` pola w ogóle. Nazwy domen mogą zawierać poprzedzający `*.` symbol wieloznaczny, aby dopasować subdomeny.
    * Przykład: Aby zezwolić na tworzenie kont JIT dla użytkowników z adresem e-mail takim jak `name@example.com` i `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Przykład: Aby całkowicie wyłączyć tworzenie kont JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Jeśli ustawione na `true`, aktualizuje dane użytkownika `imię` i `nazwisko` przy logowaniu i wyłącza formularz danych użytkownika na `/user/settings` stronie.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` i `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Gdy oba zmienne środowiskowe są ustawione, proces logowania aktualizuje `user.isAdmin = true` jeśli profil zwrócony przez OP zawiera atrybut określony przez `OVERLEAF_OIDC_IS_ADMIN_FIELD` a jego wartość odpowiada `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, w przeciwnym razie `user.isAdmin` jest ustawiane na `false`. Jeśli `OVERLEAF_OIDC_IS_ADMIN_FIELD` ma wartość `email` wtedy wartość atrybutu `emails[0].value` jest używana do sprawdzania zgodności.

Adres URL przekierowania dla Twojego dostawcy OpenID to `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

<summary>Przykładowy plik variables.env</summary>

{% code title="variables.env" overflow="wrap" %}

```dotenv
OVERLEAF_APP_NAME="Nasza instancja Overleaf"

ENABLED_LINKED_FILE_TYPES=project_file,project_output_file,url

# Umożliwia generowanie miniatur za pomocą ImageMagick
ENABLE_CONVERSIONS=true

# Wyłącza wymóg potwierdzenia adresu e-mail
EMAIL_CONFIRMATION_DISABLED=true

## Nginx
# NGINX_WORKER_PROCESSES=4
# NGINX_WORKER_CONNECTIONS=768

## Ustaw dla TLS przez nginx-proxy
# OVERLEAF_BEHIND_PROXY=true
# OVERLEAF_SECURE_COOKIE=true

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

OVERLEAF_LEFT_FOOTER=[{"text": "Skontaktuj się z zespołem wsparcia", "url": "mailto:support@example.com"}]
OVERLEAF_RIGHT_FOOTER=[{"text":"Cześć, jestem po prawej stronie", "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=Ten system jest obsługiwany przez dział x

OVERLEAF_PROXY_LEARN=true
NAV_HIDE_POWERED_BY=true

#################
## OIDC dla 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='Zaloguj się przy użyciu dostawcy OIDC Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=Dostawca OIDC Keycloak
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
```

{% endcode %}

</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/pl/konfiguracja/overleaf-toolkit/authentication/oidc-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.
