Skip to main content
Este recurso foi desenvolvido por yu-i-i/overleaf-cep. Aqui disponibilizamos alguns documentos para a sua configuração.

Configuração

Internamente, o módulo SAML do Overleaf usa a biblioteca passport-saml, e a maioria das opções de configuração a seguir é repassada ao passport-saml. Se você estiver tendo problemas para configurar o SAML, vale a pena ler o README do passport-saml para ter uma ideia da configuração que ele espera. A variável de ambiente EXTERNAL_AUTH é necessária 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, 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 campo samlIdentifiers estruturado da seguinte forma:
O externalUserId deve corresponder ao valor da propriedade especificada por userIdAttribute no perfil de usuário retornado pelo servidor do IdP. Se nenhum registro correspondente for encontrado, o banco de dados é pesquisado em busca de um usuário cujo endereço de e-mail principal corresponda ao e-mail no perfil de usuário do IdP:
  • Se esse usuário for encontrado, o campo hashedPassword é excluído para desativar a autenticação local, e o campo samlIdentifiers é adicionado.
  • Se nenhum usuário correspondente for encontrado, um novo usuário é criado com o endereço de e-mail e os samlIdentifiers do perfil do IdP.
Observação: atualmente, apenas um IdP SAML é suportado. O campo providerId 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: Log in with SAML IdP).
  • OVERLEAF_SAML_USER_ID_FIELD
    • O valor deste atributo será usado pelo Overleaf como ID de usuário externo; o padrão é nameID.
  • OVERLEAF_SAML_EMAIL_FIELD
    • Nome do campo de e-mail 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 definida como true, atualiza os campos first_name e last_name do usuário no login e desativa o formulário de dados do usuário na página /user/settings.
  • OVERLEAF_SAML_ENTRYPOINT (obrigatória)
    • URL do ponto de entrada do serviço de identidade SAML.
      • Exemplo: https://idp.example.com/simplesaml/saml2/idp/SSOService.php
      • Exemplo para Azure: https://login.microsoftonline.com/8b26b46a-6dd3-45c7-a104-f883f4db1f6b/saml2
  • OVERLEAF_SAML_ISSUER (obrigatória)
    • O nome do emissor (Issuer).
  • OVERLEAF_SAML_AUDIENCE
    • Audience esperada na resposta SAML; o padrão é o valor de OVERLEAF_SAML_ISSUER.
  • OVERLEAF_SAML_IDP_CERT (obrigatória)
    • 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, pode ser um array JSON com os caminhos dos 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 a ser incorporado nas requisições de autenticação, para que o IdP possa validar as assinaturas da requisição SAML recebida. É necessário ao configurar o endpoint de metadados quando a estratégia está configurada com uma OVERLEAF_SAML_PRIVATE_KEY. Pode ser fornecido um array JSON com caminhos de certificados para suportar a rotação de certificados. Ao fornecer um array de certificados, a primeira entrada do array deve corresponder à OVERLEAF_SAML_PRIVATE_KEY atual. As entradas adicionais do array podem ser usadas para publicar os próximos certificados aos IdPs antes de alterar a OVERLEAF_SAML_PRIVATE_KEY.
  • OVERLEAF_SAML_PRIVATE_KEY
    • Caminho para um arquivo que contém uma chave privada em formato PEM correspondente ao OVERLEAF_SAML_PUBLIC_CERT, usada para assinar as requisições de autenticação enviadas pelo passport-saml.
  • OVERLEAF_SAML_DECRYPTION_CERT
  • 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 asserções criptografadas recebidas.
  • OVERLEAF_SAML_SIGNATURE_ALGORITHM
    • Define opcionalmente o algoritmo de assinatura das requisições; os valores válidos são ‘sha1’ (padrão), ‘sha256’ (preferível) e ‘sha512’ (mais seguro, verifique se o seu IdP o suporta).
  • OVERLEAF_SAML_ADDITIONAL_PARAMS
    • Dicionário JSON de parâmetros de consulta adicionais a acrescentar a todas as requisições.
  • OVERLEAF_SAML_ADDITIONAL_AUTHORIZE_PARAMS
    • Dicionário JSON de parâmetros de consulta adicionais a acrescentar às requisições ‘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 variável de ambiente OVERLEAF_SAML_EMAIL_FIELD esteja definida. Se for necessário urn:oasis:names:tc:SAML:2.0:nameid-format:transient, você também deve definir a variável de ambiente OVERLEAF_SAML_USER_ID_FIELD, que pode, por exemplo, ser definida como o endereço de e-mail do usuário.
  • OVERLEAF_SAML_ACCEPTED_CLOCK_SKEW_MS
    • Diferença de relógio aceitável, em milissegundos, entre cliente e servidor ao verificar os timestamps de validade das condições de asserção OnBefore e NotOnOrAfter. Definir como -1 desativa completamente a verificação destas condições. O padrão é 0.
  • OVERLEAF_SAML_ATTRIBUTE_CONSUMING_SERVICE_INDEX
    • Atributo AttributeConsumingServiceIndex a adicionar à AuthnRequest para indicar ao IdP qual conjunto de atributos anexar à resposta (link).
  • OVERLEAF_SAML_AUTHN_CONTEXT
    • Array JSON de valores de formato de 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 requisição SAML inicial do provedor de serviço especifica que o IdP deve forçar uma nova autenticação do usuário, mesmo que ele possua uma sessão válida.
  • OVERLEAF_SAML_DISABLE_REQUESTED_AUTHN_CONTEXT
    • Se true, não solicita um contexto de autenticação específico. Por exemplo, você pode definir isto como 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 definida como HTTP-POST, solicita a autenticação ao IdP via binding HTTP POST; caso contrário, o padrão é HTTP-Redirect.
  • OVERLEAF_SAML_VALIDATE_IN_RESPONSE_TO
    • Se always, o InResponseTo será validado nas respostas SAML recebidas.
    • Se never, o InResponseTo não será validado (padrão).
    • Se ifPresent, 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 definidas como true (padrão), o Overleaf espera que as asserções SAML e, respectivamente, toda a resposta de autenticação SAML sejam assinadas pelo IdP. Quando ambas as opções são false, pelo menos as asserções ou a resposta devem estar assinadas.
  • OVERLEAF_SAML_REQUEST_ID_EXPIRATION_PERIOD_MS
    • Define o tempo de expiração após o qual um ID de requisição gerado para uma requisição SAML deixa de ser válido se aparecer numa resposta SAML no campo InResponseTo. Padrão: 28800000 (8 horas).
  • OVERLEAF_SAML_LOGOUT_URL
    • Endereço base a chamar com as requisiçõ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 acrescentar às requisições ‘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 seu valor corresponder a OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE ou for um array que contenha OVERLEAF_SAML_IS_ADMIN_FIELD_VALUE; caso contrário, user.isAdmin é definido como false. Se alguma destas variáveis não estiver definida, o status de administrador só é definido como true durante a criação do usuário administrador no Launchpad.
Metadados para o provedor de identidade A versão atual do Overleaf CE inclui um endpoint para obter os metadados do provedor de serviço: http://my-overleaf-instance.com/saml/meta O provedor de identidade precisará ser configurado para reconhecer o servidor Overleaf como um “provedor de serviço” (Service Provider). Consulte a documentação do seu servidor SAML para obter instruções sobre como fazer isso. Abaixo está um exemplo de metadados adequados para o provedor de serviço:
Anote os certificados, AssertionConsumerService.Location, SingleLogoutService.Location e EntityDescriptor.entityID e configure-os adequadamente no seu IdP, ou envie o arquivo de metadados ao administrador do IdP.

Passo a passo: goauthentik

Este guia percorre uma configuração testada com o goauthentik. Substitua https://overleaf.example.com pela sua OVERLEAF_SITE_URL e https://authentik.example.com pelo endereço do seu Authentik.
1

Criar o provedor e a aplicação

No Authentik, abra Applications > Applications e clique em New Application. O assistente cria a aplicação e o seu provedor ao mesmo tempo.1. Dê à aplicação um nome e um slug, por exemplo overleaf, e clique em Next:

Authentik: nome e slug da aplicação

2. Escolha SAML Provider e clique em Next:

Authentik: escolher o provedor SAML

3. Preencha o provedor:
  • Authorization Flow: default-provider-authorization-implicit-consent
  • ACS URL: https://overleaf.example.com/saml/login/callback
  • Audience: um nome para o Overleaf, por exemplo overleaf. O Overleaf o envia como OVERLEAF_SAML_ISSUER.

Authentik: o provedor SAML da aplicação

4. Abra Advanced protocol settings e defina:
  • Signing Certificate: um certificado, por exemplo authentik Self-signed Certificate
  • Sign assertions e Sign responses: ambos ativados
  • Service Provider Binding: Post

Authentik: assinatura e binding de um provedor testado (instância de teste)

5. Clique em Next até a última página e envie a aplicação.
2

Copiar os valores da página do provedor

Abra o provedor novamente. Tudo de que o Overleaf precisa está na sua visão geral:

Authentik: visão geral de um provedor SAML (instância de teste)

EntityID/Issuer em SAML Configuration é o nome do próprio Authentik. Não o coloque em OVERLEAF_SAML_ISSUER; use o Audience.
3

Instalar o certificado de assinatura

Clique em Download em Download signing certificate e salve o arquivo como data/overleaf/certs/idp_cert.pem no diretório do seu Toolkit. O contêiner o enxerga como /var/lib/overleaf/certs/idp_cert.pem:
4

Mapear os atributos

O Authentik envia os seus atributos com estes nomes:
Os grupos vêm como http://schemas.xmlsoap.org/claims/Group, uma lista. Para tornar os membros do grupo Admins do Authentik administradores do Overleaf:
O indicador de administrador é atualizado a cada login SAML. Com um campo ou valor errado, todo administrador que fizer login via SAML perde os direitos de administrador. Teste o mapeamento primeiro com uma segunda conta de administrador.
variables.env
Última modificação em 6 de outubro de 2026