OIDC Authentication
Available in Overleaf Extended CE is the ability to use a OpenID Connect (OIDC) server to manage users. The information in this page is valid for both Overleaf Toolkit Users and legacy docker-compose.yml users.
Configuration
Internally, Overleaf OIDC module uses the passport-openidconnect library. If you are having issues configuring OpenID Connect, it is worth reading the README for passport-openidconnect to get a feel for the configuration it expects.
The environment variable EXTERNAL_AUTH is required to enable the OIDC authentication module. This environment variable specifies which external authentication methods are activated. The value of this variable is a list. If the list includes oidc then OIDC authentication will be activated.
For example: EXTERNAL_AUTH=ldap oidc
When using the OIDC authentication method, a user is redirected to the Identity Provider (IdP) authentication site. If the IdP successfully authenticates the user, the Overleaf users database is checked for a record containing a thirdPartyIdentifiers field structured as follows:
thirdPartyIdentifiers: [
{
externalUserId: "...",
externalData: null,
providerId: "..."
}
]The externalUserId must match the user ID in the profile returned by the IdP server (see the OVERLEAF_OIDC_USER_ID_FIELD environment variable), and providerId must match the ID of the OIDC provider (see the OVERLEAF_OIDC_PROVIDER_ID).
If no matching record is found, the database is searched for a user with the primary email address matching the email in the IdP user profile:
If such a user is found, the
thirdPartyIdentifiersfield is updated.If no matching user is found and JIT account creation is not disabled, a new user is created with the email address and
thirdPartyIdentifiersfrom the IdP profile.
In both cases, the user is said to be 'linked' to the external OIDC user. The user can be unlinked from the OIDC provider on the /user/settings page.
Environment Variables
The values of the following five required variables can be found using .well-known/openid-configuration endpoint of your OpenID Provider (OP).
OVERLEAF_OIDC_ISSUER(required)OVERLEAF_OIDC_AUTHORIZATION_URL(required)OVERLEAF_OIDC_TOKEN_URL(required)OVERLEAF_OIDC_USER_INFO_URL(required)OVERLEAF_OIDC_LOGOUT_URL(required)
The values of the following two required variables will be provided by the admin of your OP
OVERLEAF_OIDC_CLIENT_ID(required)OVERLEAF_OIDC_CLIENT_SECRET(required)OVERLEAF_OIDC_SCOPEDefault:
openid profile email
OVERLEAF_OIDC_PROVIDER_IDArbitrary ID of the OP, defaults to
oidc.
OVERLEAF_OIDC_PROVIDER_NAMEThe name of the OP, used in the
Linked Accountssection of the/user/settingspage, defaults toOIDC Provider.
OVERLEAF_OIDC_IDENTITY_SERVICE_NAMEDisplay name for the identity service, used on the login page (default:
Log in with $OVERLEAF_OIDC_PROVIDER_NAME).
OVERLEAF_OIDC_PROVIDER_DESCRIPTIONDescription of OP, used in the
Linked Accountssection (default:Log in with $OVERLEAF_OIDC_PROVIDER_NAME).
OVERLEAF_OIDC_PROVIDER_INFO_LINKLearn moreURL in the OP description, default: noLearn morelink in the description.
OVERLEAF_OIDC_PROVIDER_HIDE_NOT_LINKEDDo not show OP on the
/user/settingspage, if the user's account is not linked with the OP, defaultfalse.
OVERLEAF_OIDC_USER_ID_FIELDThe value of this attribute will be used by Overleaf as the external user ID, defaults to
id. Other possible reasonable values areemailandusername(corresponding topreferred_usernameOIDC claim).
OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINSRestricts Just-in-Time (JIT) account creation for users authenticating via OIDC. If set to a comma-separated list of domain names, a new account will be created only if the domain of the user's email address matches one in the listed domains. If the domain does not match, an admin must manually create the user account using the OIDC user’s email address, with either a strong random password or, preferably, without the
hashedPasswordfield at all. Domain names may include a leading*.wildcard to match subdomains.Example: To allow JIT account creation for users with email address like
[email protected]and[email protected]:OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=example.com, *.example.comExample: To completely disable JIT account creation:
OVERLEAF_OIDC_ALLOWED_EMAIL_DOMAINS=
OVERLEAF_OIDC_UPDATE_USER_DETAILS_ON_LOGINIf set to
true, updates the userfirst_nameandlast_namefield on login, and disables the user details form on/user/settingspage.
OVERLEAF_OIDC_IS_ADMIN_FIELDandOVERLEAF_OIDC_IS_ADMIN_FIELD_VALUEWhen both environment variables are set, the login process updates
user.isAdmin = trueif the profile returned by the OP contains the attribute specified byOVERLEAF_OIDC_IS_ADMIN_FIELDand its value matchesOVERLEAF_OIDC_IS_ADMIN_FIELD_VALUE, otherwiseuser.isAdminis set tofalse. IfOVERLEAF_OIDC_IS_ADMIN_FIELDisemailthen the value of the attributeemails[0].valueis used for match checking.
The redirect URL for your OpenID Provider is https://my-overleaf-instance.com/oidc/login/callback.
Last updated
Was this helpful?