> 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/saml-authentication.md).

# Autenticação SAML

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 SAML do Overleaf usa a [passport-saml](https://github.com/node-saml/passport-saml) biblioteca, a maioria das opções de configuração a seguir é passada para `passport-saml`. Se estiver tendo problemas para configurar o SAML, vale a pena ler o README de `passport-saml` 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 SAML. Esta variável de ambiente especifica quais métodos de autenticação externa estão ativados. O valor desta variável é uma lista. Se a lista incluir `saml` então a autenticação SAML será ativada.

Por exemplo: `EXTERNAL_AUTH=ldap saml`

Ao usar o método de autenticação SAML, 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 que contenha um `samlIdentifiers` campo estruturado da seguinte forma:

```json
samlIdentifiers: [
  {
    externalUserId: "...",
    providerId: "1",
    userIdAttribute: "..."
  }
]
```

O `externalUserId` deve corresponder ao valor da propriedade especificada por `userIdAttribute` no perfil do usuário retornado pelo servidor IdP.

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 do usuário do IdP:

* Se um usuário assim for encontrado, o `hashedPassword` o campo é excluído para desativar a autenticação local, e o `samlIdentifiers` campo é adicionado.
* Se nenhum usuário correspondente for encontrado, um novo usuário é criado com o endereço de e-mail e `samlIdentifiers` do perfil do IdP.

**Nota:** Atualmente, apenas um IdP SAML é compatível. O `providerId` campo em `samlIdentifiers` é fixado em `'1'`.

#### Variáveis de ambiente

* `OVERLEAF_SAML_IDENTITY_SERVICE_NAME`
  * Nome de exibição do serviço de identidade, usado na página de login (padrão: `Entrar com o IdP SAML`).
* `OVERLEAF_SAML_USER_ID_FIELD`
  * O valor deste atributo será usado pelo Overleaf como o ID de usuário externo, o padrão é `nameID`.
* `OVERLEAF_SAML_EMAIL_FIELD`
  * Nome do campo Email no perfil do usuário, o padrão é `nameID`.
* `OVERLEAF_SAML_FIRST_NAME_FIELD`
  * Nome do campo firstName no perfil do usuário, o padrão é `givenName`.
* `OVERLEAF_SAML_LAST_NAME_FIELD`
  * Nome do campo lastName no perfil do usuário, o padrão é `lastName`
* `OVERLEAF_SAML_UPDATE_USER_DETAILS_ON_LOGIN`
  * Se definido como `true`, atualiza o `first_name` e `last_name` campo no login e desative o formulário de detalhes do usuário em `/user/settings` página.
* `OVERLEAF_SAML_ENTRYPOINT` **(obrigatório)**
  * URL de entrada do serviço de identidade SAML.
    * Exemplo: `https://idp.example.com/simplesaml/saml2/idp/SSOService.php`
    * Exemplo do Azure: `https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2`
* `OVERLEAF_SAML_ISSUER` **(obrigatório)**
  * Nome do emissor.
* `OVERLEAF_SAML_AUDIENCE`
  * Audiência esperada da resposta SAML, o padrão é o valor de `OVERLEAF_SAML_ISSUER`.
* `OVERLEAF_SAML_IDP_CERT` **(obrigatório)**
  * Caminho para um arquivo que contém o certificado público do Provedor de Identidade, usado para validar as assinaturas das respostas SAML recebidas. Se o Provedor de Identidade tiver vários certificados de assinatura válidos, então pode ser um array JSON de caminhos para os certificados.
    * Exemplo (um certificado): `/var/lib/overleaf/certs/idp_cert.pem`
    * Exemplo (vários certificados): `["var/lib/overleaf/certs/idp_cert.pem", "/var/lib/overleaf/certs/idp_cert_old.pem"]`
* `OVERLEAF_SAML_PUBLIC_CERT`
  * Caminho para um arquivo que contém o certificado público de assinatura usado para incorporar nas solicitações de autenticação, de modo que o IdP valide as assinaturas da SAML Request recebida. É necessário ao configurar o [endpoint de metadados](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider) quando a estratégia é configurada com um `OVERLEAF_SAML_PRIVATE_KEY`. Pode ser fornecido um array JSON de caminhos para certificados para oferecer suporte à rotação de certificados. Ao fornecer um array de certificados, a primeira entrada do array deve corresponder ao atual `OVERLEAF_SAML_PRIVATE_KEY`. Entradas adicionais no array podem ser usadas para publicar certificados futuros aos IdPs antes de alterar o `OVERLEAF_SAML_PRIVATE_KEY`.
* `OVERLEAF_SAML_PRIVATE_KEY`
  * Caminho para um arquivo que contém uma chave privada no formato PEM correspondente ao `OVERLEAF_SAML_PUBLIC_CERT` usada para assinar as solicitações de autenticação enviadas pelo passport-saml.
* `OVERLEAF_SAML_DECRYPTION_CERT`
  * Caminho para um arquivo que contém o certificado público, usado para o [endpoint de metadados](https://github.com/yu-i-i/overleaf-cep/wiki/Extended-CE:-SAML-Authentication#metadata-for-the-identity-provider).
* `OVERLEAF_SAML_DECRYPTION_PVK`
  * Caminho para um arquivo que contém a chave privada correspondente ao `OVERLEAF_SAML_DECRYPTION_CERT` que será usada para tentar descriptografar quaisquer assertions criptografadas recebidas.
* `OVERLEAF_SAML_SIGNATURE_ALGORITHM`
  * Opcionalmente, defina o algoritmo de assinatura para assinar solicitações; os valores válidos são 'sha1' (padrão), 'sha256' (preferido), 'sha512' (mais seguro, verifique se o seu IdP o suporta).
* `OVERLEAF_SAML_ADDITIONAL_PARAMS`
  * Dicionário JSON de parâmetros de consulta adicionais a serem adicionados a todas as solicitações.
* `OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS`
  * Dicionário JSON de parâmetros de consulta adicionais a serem adicionados às solicitações de 'authorize'.
    * Exemplo: `{"some_key": "some_value"}`
* `OVERLEAF_SAML_IDENTIFIER_FORMAT`
  * Formato do identificador de nome a solicitar ao provedor de identidade (padrão: `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress`). Se usar `urn:oasis:names:tc:SAML:2.0:nameid-format:persistent`, certifique-se de que a `OVERLEAF_SAML_EMAIL_FIELD` variável de ambiente esteja definida. Se `urn:oasis:names:tc:SAML:2.0:nameid-format:transient` for necessário, você também deve definir a `OVERLEAF_SAML_ID_FIELD` variável de ambiente, que pode, por exemplo, ser definida como o endereço de e-mail do usuário.
* `OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS`
  * Tempo em milissegundos de desvio aceitável entre cliente e servidor ao verificar os carimbos de data/hora de validade das condições da assertion OnBefore e NotOnOrAfter. Definir para -1 desativará totalmente a verificação dessas condições. O padrão é 0.
* `OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX`
  * `AttributeConsumingServiceIndex` atributo a adicionar ao AuthnRequest para instruir o IdP sobre qual conjunto de atributos anexar à resposta ([link](http://blog.aniljohn.com/2014/01/data-minimization-front-channel-saml-attribute-requests.html)).
* `OVERLEAF_SAML_AUTHN_CONTEXT`
  * Array JSON de valores de formato do identificador de nome para solicitar o contexto de autenticação. Padrão: `["urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"]`.
* `OVERLEAF_SAML_FORCE_AUTHN`
  * Se `true`, a solicitação inicial SAML do provedor de serviços especifica que o IdP deve forçar a reautenticação do usuário, mesmo que ele possua uma sessão válida.
* `OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT`
  * Se `true`, não solicite um contexto de autenticação específico. Por exemplo, você pode definir isso para `true` para permitir contextos adicionais, como logins sem senha (`urn:oasis:names:tc:SAML:2.0:ac:classes:X509`). O suporte a contextos adicionais depende do seu IdP.
* `OVERLEAF_SAML_AUTHN_REQUEST_BINDING`
  * Se definido como `HTTP-POST`, solicitará autenticação ao IdP via vinculação HTTP POST; caso contrário, o padrão é HTTP-Redirect.
* `OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO`
  * Se `always`, então InResponseTo será validado nas respostas SAML recebidas.
  * Se `nunca`, então InResponseTo não será validado (padrão).
  * Se `ifPresent`, então InResponseTo só será validado se estiver presente na resposta SAML recebida.
* `OVERLEAF_SAML_WANT_ASSERTIONS_SIGNED` e `OVERLEAF_SAML_WANT_AUTHN_RESPONSE_SIGNED`
  * Quando definido como `true` (padrão), o Overleaf espera que as Assertions SAML, respectivamente a resposta de autenticação SAML inteira, sejam assinadas pelo IdP. Quando ambas as opções forem `false`, pelo menos uma das assertions ou da resposta deve estar assinada.
* `OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS`
  * Define o tempo de expiração em que um Request ID gerado para uma solicitação SAML não será válido se for visto em uma resposta SAML no campo `InResponseTo` campo. Padrão: 28800000 (8 horas).
* `OVERLEAF_SAML_LOGOUT_URL`
  * endereço base a ser chamado com solicitações de logout (padrão: `entryPoint`).
    * Exemplo: `https://idp.example.com/simplesaml/saml2/idp/SingleLogoutService.php`
* `OVERLEAF_SAML_ADDITIONAL_LOGOUT_PARAMS`
  * Dicionário JSON de parâmetros de consulta adicionais a serem adicionados às solicitações de 'logout'.
* `OVERLEAF_SAML_IS_ADMIN_FIELD` e `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE`
  * Quando ambas as variáveis de ambiente estão definidas, o processo de login atualiza `user.isAdmin = true` se o perfil retornado pelo IdP SAML contiver o atributo especificado por `OVERLEAF_SAML_IS_ADMIN_FIELD` e o respetivo valor corresponde a `OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE` ou é uma matriz que contém `OVERLEAF_SAML_IS_ADMIN_FIELD_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.

**Metadados do Provedor de Identidade**

A versão atual do Overleaf CE inclui um endpoint para recuperar os metadados do Provedor de Serviços: `http://my-overleaf-instance.com/saml/meta`

O Provedor de Identidade precisará ser configurado para reconhecer o servidor Overleaf como um "Provedor de Serviços". Consulte a documentação do seu servidor SAML para instruções sobre como fazer isso.

Abaixo está um exemplo de metadados apropriados do Provedor de Serviços:

<details>

<summary><strong>ol-meta.xml</strong></summary>

```
<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
                  xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                  entityID="MyOverleaf"
                  ID="_b508c83b7dda452f5b269383fb391107116f8f57">
  <SPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" AuthnRequestsSigned="true" WantAssertionsSigned="true">
    <KeyDescriptor use="signing">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <KeyDescriptor use="encryption">
      <ds:KeyInfo>
        <ds:X509Data>
          <ds:X509Certificate>MII...
[skipped]
</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes256-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2009/xmlenc11#aes128-gcm"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc"/>
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                         Location="https://my-overleaf-instance.com/saml/logout/callback"/>
    <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
    <AssertionConsumerService index="1"
                              isDefault="true"
                              Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                              Location="https://my-overleaf-instance.com/saml/login/callback"/>
  </SPSSODescriptor>
</EntityDescriptor>

```

</details>

Observe os certificados, `AssertionConsumerService.Location`, `SingleLogoutService.Location` e `EntityDescriptor.entityID` e defina-os adequadamente na configuração do seu IdP, ou envie o arquivo de metadados ao administrador do IdP.

<details>

<summary><strong>Arquivo de exemplo variables.env (mínimo)</strong></summary>

<pre><code>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

#################
##     SAML    ##
#################

EXTERNAL_AUTH=saml
OVERLEAF_SAML_ISSUER=MyOverleaf
OVERLEAF_SAML_IDENTITY_SERVICE_NAME='Entrar com o Provedor SAML'
OVERLEAF_SAML_EMAIL_FIELD=Email
OVERLEAF_SAML_FIRST_NAME_FIELD=DisplayName
OVERLEAF_SAML_LAST_NAME_FIELD=DisplayName
OVERLEAF_SAML_ENTRYPOINT=http://localhost:18000/login/saml/authorize/admin/SAML_Overleaf
<strong>OVERLEAF_SAML_IDP_CERT=/var/lib/overleaf/certs/idp_cert.pem
</strong>OVERLEAF_SAML_SIGNATURE_ALGORITHM=
</code></pre>

</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/saml-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.
