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

# Autenticação OIDC

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.

### Configuração

Internamente, o módulo OIDC do Overleaf usa a [passport-openidconnect](https://github.com/jaredhanson/passport-openidconnect) biblioteca. Se você estiver tendo problemas para configurar o OpenID Connect, vale a pena ler o README de `passport-openidconnect` para ter uma ideia da configuração que ele espera.

A variável de ambiente `EXTERNAL_AUTH` é necessário para ativar o módulo de autenticação OIDC. Esta 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 `oidc` então a autenticação OIDC será ativada.

Por exemplo: `EXTERNAL_AUTH=ldap oidc`

Ao usar o método de autenticação OIDC, o usuário é redirecionado para o site de autenticação do Provedor de Identidade (IdP). Se o IdP autenticar o usuário com sucesso, o banco de dados de usuários do Overleaf é verificado em busca de um registro contendo um `thirdPartyIdentifiers` campo estruturado da seguinte forma:

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

O `externalUserId` deve corresponder ao ID do usuário no perfil retornado pelo servidor IdP (veja a `OVERLEAF_OIDC_USER_ID_FIELD` variável de ambiente), e `providerId` deve corresponder ao ID do provedor OIDC (veja a `OVERLEAF_OIDC_PROVIDER_ID`).

Se nenhum registro correspondente for encontrado, o banco de dados é pesquisado em busca de um usuário com o endereço de e-mail principal correspondente ao e-mail no perfil de usuário do IdP:

* Se tal usuário for encontrado, o `thirdPartyIdentifiers` campo é atualizado.
* Se nenhum usuário correspondente for encontrado e a criação de conta JIT não estiver desativada, um novo usuário será criado com o endereço de e-mail e `thirdPartyIdentifiers` do perfil do IdP.

Em ambos os casos, diz-se que o usuário está 'vinculado' ao usuário OIDC externo. O usuário pode ser desvinculado do provedor OIDC na `/user/settings` página.

#### Variáveis de ambiente

Os valores das cinco variáveis obrigatórias a seguir podem ser encontrados usando `.well-known/openid-configuration` endpoint do seu Provedor OpenID (OP).

* `OVERLEAF_OIDC_ISSUER` **(obrigatório)**
* `OVERLEAF_OIDC_AUTHORIZATION_URL` **(obrigatório)**
* `OVERLEAF_OIDC_TOKEN_URL` **(obrigatório)**
* `OVERLEAF_OIDC_USER_INFO_URL` **(obrigatório)**
* `OVERLEAF_OIDC_LOGOUT_URL` **(obrigatório)**

Os valores das duas variáveis obrigatórias a seguir serão fornecidos pelo administrador do seu OP

* `OVERLEAF_OIDC_CLIENT_ID` **(obrigatório)**
* `OVERLEAF_OIDC_CLIENT_SECRET` **(obrigatório)**
* `OVERLEAF_OIDC_SCOPE`
  * Padrão: `openid profile email`
* `OVERLEAF_OIDC_PROVIDER_ID`
  * ID arbitrário do OP, o padrão é `oidc`.
* `OVERLEAF_OIDC_PROVIDER_NAME`
  * O nome do OP, usado na `Contas vinculadas` secção do `/user/settings` página, o padrão é `Provedor OIDC`.
* `OVERLEAF_OIDC_IDENTITY_SERVICE_NAME`
  * Nome de exibição do serviço de identidade, usado na página de login (padrão: `Entrar com $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_DESCRIPTION`
  * Descrição do OP, usada na `Contas vinculadas` seção (padrão: `Entrar com $OVERLEAF_OIDC_PROVIDER_NAME`).
* `OVERLEAF_OIDC_PROVIDER_INFO_LINK`
  * `Saiba mais` URL na descrição do OP, padrão: sem `Saiba mais` link na descrição.
* `OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKED`
  * Não mostrar o OP na `/user/settings` página, se a conta do usuário não estiver vinculada ao OP, padrão `false`.
* `OVERLEAF_OIDC_USER_ID_FIELD`
  * O valor desse atributo será usado pelo Overleaf como o ID de usuário externo, o padrão é `id`. Outros valores razoáveis possíveis são `email` e `nome de utilizador` (correspondente a `preferred_username` claim OIDC).
* `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS`
  * Restringe a criação de conta Just-in-Time (JIT) para usuários que se autenticam via OIDC. Se definido como uma lista de nomes de domínio separados por vírgulas, uma nova conta só será criada se o domínio do endereço de e-mail do usuário corresponder a um dos domínios listados. Se o domínio não corresponder, um administrador deve criar manualmente a conta do usuário usando o endereço de e-mail do usuário OIDC, com uma senha aleatória forte ou, de preferência, sem o `hashedPassword` campo de forma alguma. Os nomes de domínio podem incluir um `*.` coringa à esquerda para corresponder a subdomínios.
    * Exemplo: Para permitir a criação de conta JIT para usuários com endereços de e-mail como `name@example.com` e `name@math.example.com`:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.com`
    * Exemplo: Para desativar completamente a criação de conta JIT:\
      `OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=`
* `OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se definido como `true`, atualiza o campo do usuário `first_name` e `last_name` campo no login e desativa o formulário de detalhes do usuário em `/user/settings` página.
* `OVERLEAF_OIDC_IS_ADMIN_FIELD` e `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`
  * Quando ambas as variáveis de ambiente estão definidas, o processo de início de sessão atualiza `user.isAdmin = true` se o perfil retornado pelo OP contiver o atributo especificado por `OVERLEAF_OIDC_IS_ADMIN_FIELD` e seu valor corresponder a `OVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE`, caso contrário `user.isAdmin` estiver definido como `false`. Se `OVERLEAF_OIDC_IS_ADMIN_FIELD` é `email` então o valor do atributo `emails[0].value` é usado para verificar a correspondência.

A URL de redirecionamento do seu Provedor OpenID é `https://my-overleaf-instance.com/oidc/login/callback`.

<details>

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

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

```dotenv
OVERLEAF_APP_NAME="A nossa instância Overleaf"

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 de email
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=A 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

#################
## OIDC para 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='Entrar com o provedor OIDC do Keycloak'
OVERLEAF_OIDC_PROVIDER_NAME=Provedor OIDC do 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/pt/configuracao/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.
