GitLab SSO and identity integration

Self-managed GitLab can sign users in through your existing identity provider, sync groups and deprovision leavers. This page sets out the decisions, build sequence, effort drivers and checks that a team needs before going live.

On this page

GitLab SSO and identity integration: what your team must decide first

Connecting a self-managed GitLab instance to your corporate identity provider involves four pieces of work: choosing the authentication protocol, wiring the provider to the instance, mapping identity provider groups to GitLab roles, and enforcing two-factor authentication. Settle the protocol before anyone opens an administration page, because that choice determines which group data, account attributes and offboarding behavior you can rely on later. The business requirement is specific: sign-in, group access and offboarding must all run through the corporate directory, so that an employee who leaves loses repository and pipeline access without a manual cleanup inside GitLab.

The work looks simpler than it is because of account linking. Many instances already hold local accounts created before single sign-on, and some users may hold two identities with the same email address. Decide the matching key before go-live, usually an email address, username or the provider's stable user identifier, and confirm which attribute the identity team guarantees will not change. Then decide who reviews existing local accounts, who merges duplicates and what happens to repositories, issues and commit attribution owned by an account that is merged or removed. Skipping this step produces users who sign in successfully but cannot see their own projects.

Sign-in and provisioning are different functions, and teams often assume one covers the other. Sign-in checks identity when a user logs in. Provisioning creates, updates and deactivates accounts independently of login, which is what keeps a departed employee from holding an active GitLab account. Decide who owns deprovisioning and how quickly a disabled directory account must lose access. Group sync needs the same discipline: choose which directory groups feed GitLab, whether nested groups count, how sync runs on a schedule, and which groups are excluded so that a broad directory group does not grant Owner rights by accident. Write these rules down as a mapping table the identity team can review.

Plan a break-glass local administrator before enforcing SSO. This account must have a strong, separately stored credential, be tested on a fixed schedule and stay usable when the identity provider, the network path to it or its certificates fail. Confirm with your GitLab documentation how password sign-in and SSO-only policy interact for that account, and confirm how two-factor enforcement is applied when the provider already requires a second factor. Restoring configuration after a failure also needs the secrets and configuration files that the backup procedure requires you to save separately, so include them in the same runbook.

The GitLab authentication documentation lists LDAP, SAML, generic OAuth 2.0 and OmniAuth providers, Kerberos, JWT, smart card authentication and SCIM user provisioning. Availability of each option depends on edition and may change between versions, so confirm it against the GitLab pricing page and the authentication documentation before choosing a protocol. Ask your identity provider team whether its SCIM implementation supports deprovisioning, and whether it supports the group attributes you need. The decision record should name the protocol, the matching key, the group mapping rules, the deprovisioning owner, the break-glass account and the two-factor policy. That record, not the configuration screens, is what an auditor and a future administrator will ask for.

Which GitLab identity components and settings you will configure

A GitLab identity integration touches two systems that must agree on users, groups and roles. The cards below separate what the GitLab instance must be configured with from what the identity provider must publish, so each side can be reviewed and tested on its own.

Authentication providers in administration settings

This is where GitLab administrators enable and order the sign-in methods offered on the sign-in page, including whether password sign-in stays available alongside external providers. Decide which providers are visible, which are the default, and whether sign-up from an external identity is allowed. Confirm the exact option names and layout in the GitLab version you deploy, because the administration screens change between releases. Test each enabled method with a non-administrator account before cutover.

OmniAuth provider configuration in gitlab.rb

For SAML, OpenID Connect and other OmniAuth-based providers, the provider definitions live in the Linux package configuration file gitlab.rb and are applied with a reconfigure run. Secrets such as client secrets and certificates must be kept out of shared repositories and backed up separately from the rest of the configuration. Record the callback URL each provider expects, because a mismatch between the registered redirect address and the GitLab external URL is a common cause of failed sign-in. Check the configuration file against the hardening guidance before production use.

LDAP server and group sync settings

LDAP and Active Directory connections are configured on the GitLab side with the server address, encryption, bind account, user filter and attribute mapping, and group synchronization rules that link directory groups to GitLab groups and access levels. Plan which directory groups grant which roles before enabling sync, since sync changes membership automatically. Use a read-only bind account with the narrowest directory rights that still return the required users and groups. Verify the result with a test user from each group.

SAML and OpenID Connect application registration

Each SAML or OpenID Connect integration needs a matching application or client registered in the identity provider, with the GitLab redirect URL, the identifier or client ID, and the signing or token settings agreed in advance. The registration decides which users can sign in at all, so assignment to the application should be scoped to the intended groups. Record who owns each registration and when its certificate or secret expires. Confirm the exact registration fields in your identity provider, since they differ by vendor.

SCIM provisioning endpoints

SCIM lets the identity provider create, update and deactivate GitLab users automatically, so offboarding does not depend on someone remembering to disable an account. On the GitLab side, the team must enable provisioning for the relevant group and generate the endpoint and token that the identity provider uses. Decide how deprovisioning maps to blocking or deleting accounts, and how provisioned users interact with local accounts. Test a deactivation end to end, because it is the change that matters most in an audit.

Local root account and break-glass access

The local root account is the administrator login that still works when the identity provider, directory or network path is unavailable. Set a strong, unique password, store it in a controlled vault, and decide who may use it and under what approval. Confirm that two-factor authentication applies to it and that its use generates an alert or audit record. Test the break-glass path at least once before go-live, so the team knows the sign-in page and credentials work when they are needed.

Identity provider directory groups and claims

On the identity provider side, the team must define the directory groups that map to GitLab roles, and the claims or attributes sent with each sign-in, such as the username, email and group membership. Group names and attribute formats must match what GitLab expects in its group mapping and claim configuration. Keep a written mapping of directory group to GitLab group and access level, and review it with the owners of both systems. Confirm which attributes are available in your directory before designing the mapping.

Choosing LDAP, SAML, OpenID Connect or Kerberos for GitLab SSO

This table compares the sign-in and provisioning options GitLab Self-Managed supports, with the directory, network and device needs that favor each one and the upkeep each adds. Read each row against your directory type and whether you need provisioning or sign-in only. The main takeaway is to choose the option your identity source already runs well, then budget for certificate, secret and attribute mapping upkeep before you commit.

OptionWhen it fitsOperational cost
LDAP or Active Directory with group syncActive Directory or LDAP with group sync to map directory groups to GitLab roles. GitLab must reach the directory servers over the network.A directory service account to maintain, its password rotation and bind settings. Confirm group sync availability on your tier.
SAMLAn enterprise identity provider that already issues SAML assertions for browser sign-in to other applications.Signing certificate to rotate before expiry, plus attribute mapping kept aligned with identity provider claims.
OpenID Connect via OmniAuthA cloud or modern identity provider that supports OpenID Connect, where teams standardize on OIDC across applications.Client ID and client secret to rotate, redirect URI kept in sync with the instance URL, and claim mapping upkeep.
SCIM provisioning alongside sign-inJoiners, leavers and group changes must flow from the identity provider without waiting for a user to sign in. Pair with SAML or OIDC.Provisioning token to rotate, plus deprovisioning tests repeated after identity provider changes. Confirm SCIM availability on your tier.
KerberosWindows domain users on domain-joined workstations, with a domain-joined GitLab host. Less suited to browser-only users.Keytab and service principal to maintain, plus extra testing with each Git client and browser configuration.
Smart cardUsers authenticate with badges or certificates, typically in regulated or government environments with card readers deployed.Certificate authority trust and revocation checking to maintain, plus testing on each client operating system and reader model.
Local-only fallbackBreak-glass accounts for identity provider outages and emergency administrator access only.Separate credentials to store and review, two-factor enforcement to confirm, and periodic test logins.

How group sync maps identity provider groups to GitLab roles

The design decision that causes the most rework in GitLab group sync is where access comes from. Teams usually choose between three models. In the first, directory groups map to GitLab groups and roles, so the identity provider is the source of truth for who can do what. In the second, a smaller set of approved directory groups grants a broad entry point, and project or group roles are then managed inside GitLab. In the third, membership is assigned manually after a user's first sign-in, which keeps control in GitLab but moves joiner, mover and leaver work onto administrators. Make this choice with your identity and engineering leads before you open the authentication settings, because changing the model later means re-validating every group and role already in use.

Take refresh and removal behavior from the authentication documentation for your GitLab version, and confirm it on that version before you rely on it. Check how often group membership is refreshed for each provider you use, whether LDAP group sync and SAML group links behave the same way, and which of these features depend on a particular subscription tier. Then test the leaver case directly: remove a test user from a mapped directory group, wait for the next refresh, and record whether GitLab removes the membership, which role remains, and whether manually granted memberships survive. Also confirm what happens when a user is disabled in the directory. That is a separate path from group removal, and it is often the first thing auditors ask about.

Settle the naming convention and the owner of each mapping before configuration starts. A name that encodes the team, the environment and the intended role makes the mapping readable to the next administrator and to the reviewer checking access. Agree on who requests a new mapping, who approves it, and who is accountable when a directory group changes owner or is deleted. Directory teams often rename or split groups for their own reasons, and a mapping that points at a renamed group will quietly stop granting access. Ask the directory team to commit to advance notice for any group that GitLab references, and write that obligation into the mapping record so it does not depend on memory.

Test role mapping with a standard, non-administrator account in every mapped group, and also with at least one account that is not an administrator in any group. Administrators bypass many of the checks that matter to ordinary users, so an administrator login can show a working setup that a developer or auditor will never see. For each test account, record the GitLab groups joined, the role assigned at each group and project level, and whether the account can see and change exactly what its role should allow. Include at least one account that belongs to two mapped groups with different roles, since the outcome depends on how GitLab resolves overlapping membership in your version. Confirm that behavior in the documentation and record the result.

Keep the final mapping in a controlled document with an owner and a revision history. A useful record lists each directory group, its GitLab group or role, the owner, the approver, the date of approval, the GitLab version it was tested on and the date of the last test. Place it under the same change control as other access configuration so that every edit has a stated reason and a reviewer. This record is also the evidence an assessor will ask for when they test access management, although it does not replace an independent assessment. Review it at a set interval and after every GitLab upgrade, because a release can change how group sync behaves.

GitLab SSO setup sequence, from provider registration to role mapping

This sequence takes a self-managed GitLab instance from an unconfigured identity provider connection to a cut-over sign-in path with tested roles, enforced two-factor authentication and a documented fallback. Each step closes with a check the team can record before moving on.

  1. Confirm target version and upgrade path

    Confirm the GitLab version you will run and the upgrade path to it before any identity work begins. GitLab requires upgrades to pass through required upgrade stops, so check the upgrade paths documentation against your current version and plan the stops in order. The platform owner and the GitLab administrator should sign off together. The step closes when the target version and each required stop are written down and the staging instance is confirmed to match the production version.

  2. Document identity provider and directory design

    Record which identity provider or directory is the source of truth, which protocol you will use (LDAP or Active Directory, SAML, OpenID Connect through OmniAuth, or Kerberos or smart card where required), and which directory groups should map to GitLab access. Note who owns the provider configuration, which users are in scope and which accounts must stay local. The security and identity teams should review the document. The step closes when the design is approved and every in-scope group has a named owner.

  3. Create a staging instance

    Build a non-production GitLab instance that matches production in version, installation method and configuration layout. Load a copy of settings and a small set of test accounts, and keep it isolated from production data. The platform team does the build, and the identity team confirms the staging instance can reach the provider's test endpoints. The step closes when the staging instance starts cleanly, its administrator can sign in with a local account, and the team has a shared place to record test results.

  4. Register the GitLab application or service account

    Register GitLab with the identity provider. For SAML or OpenID Connect, create the application with the redirect or assertion consumer URLs for the staging host. For LDAP or Active Directory, create a bind service account with read access limited to the search base and the attributes GitLab needs. The identity team performs the registration and records client identifiers, certificates and bind credentials in the team's secrets store. The step closes when the provider shows the application or account as active and the staging host can reach the provider over the agreed network path.

  5. Configure the chosen OmniAuth, LDAP or SAML settings

    Add the provider settings to the staging instance configuration, using the protocol chosen in the design step. Use the Linux package configuration file or the instance settings path that your installation method documents. Keep secrets out of shared files and restrict who can read the configuration. Restart or reconfigure the instance as the documentation requires. The step closes when the instance reports the provider as enabled and the configuration check runs without errors.

  6. Test sign-in with a pilot account

    Sign in to staging with a pilot account that belongs to an in-scope group, then sign in with an account that is outside every mapped group. The first login should create or link the GitLab user as expected. The second should be denied or left without project access. Record the login path, the attributes GitLab received and any error messages. The step closes when the in-scope pilot signs in successfully and the out-of-scope account is refused or has no access, with both results written down.

  7. Configure group sync or SCIM provisioning

    Decide whether directory group membership will be synchronized into GitLab or whether SCIM will provision users and group changes. Configure the group sync or SCIM settings against the staging provider, and agree who handles deprovisioning when someone leaves the directory. Confirm that the provider's behavior for disabled accounts matches your offboarding process. The step closes when a test group change at the provider appears in GitLab within the sync cycle, and a disabled test user loses access as expected.

  8. Define and test role mappings

    Map each directory group to the GitLab role or group it should receive, using the least privilege that the design step approved. Create one test user for each role, then check that each user sees only the projects and actions that role allows. Include an out-of-scope case for every role. Keep the mapping in version-controlled documentation so reviewers can compare it to the design. The step closes when every role has a passing test and the group memberships seen in GitLab match the mapping table.

  9. Enforce two-factor and review local administrator access

    Turn on two-factor authentication for all users that sign in through the provider, and confirm how the provider's own multi-factor policy works with GitLab's setting. Review the local administrator account, its credentials, and the break-glass procedure for the case when the provider is unavailable. Store that procedure with the rollback plan. The security owner signs off. The step closes when a test user without a second factor is prompted to enrol, and the local administrator path is tested and documented.

  10. Cut over with a rollback plan

    Schedule the production change, repeat the configuration from staging using the recorded settings, and run the pilot sign-in and role tests again on production. Write the rollback plan before the change starts. It should state how to revert the provider settings, which local administrator accounts to use, and who decides to roll back. The step closes when production sign-in is confirmed for the pilot group, the rollback steps have been checked against the staging instance, and the team has recorded the final configuration.

How GitLab SSO setup changes on single node, high availability and air-gapped installs

A single-node Linux package install keeps all SSO settings in one place. The configuration lives in the gitlab.rb file on the one server, and the identity provider only needs to reach that one host. Most of the work is correct external URL configuration and a clean certificate chain, because SAML assertion consumer URLs and OpenID Connect redirect URIs are built from the external URL.

  • Configuration location: Omniauth provider blocks sit in /etc/gitlab/gitlab.rb, and changes apply after a reconfigure run.
  • Callback consistency: Confirm that external_url matches the hostname registered with the identity provider, including scheme and port.
  • Certificates: Install the certificate chain that the identity provider and GitLab both trust, and keep the private key readable only by root.
  • Secrets: Store client secrets and the gitlab-secrets.json file under your backup plan, since losing them breaks sign-in for stored tokens.
  • Reconfigure and test: Run the reconfigure step after each change and sign in with a test account before enabling the provider for everyone.

Before go-live, confirm that a break-glass local administrator remains able to sign in if the identity provider is unavailable.

What drives GitLab SSO effort and how to keep each driver down

This table lists the factors that most change the effort of a GitLab SSO project, with a way to reduce each one. Read it as a checklist for scoping: the more a row applies to your environment, the more design, testing and recurring work to plan for. The main takeaway is that a written list of these drivers is the basis for a fixed-scope quote.

DriverWhy it changes effortHow to keep it down
Identity sources and tenantsEach directory, IdP or tenant needs its own attribute mapping, test accounts and failure handling. Multiple sources multiply design and regression work.Choose one directory source of truth for GitLab users. Retire or exclude secondary sources before design starts.
Directory size and group nestingDeep or nested groups make LDAP and Active Directory group sync queries slower to design and harder to verify. Large populations increase sync and test data volume.Sync only the groups GitLab needs. Flatten nesting where possible and agree the sync filter in writing.
Provisioning and deprovisioning scopeSCIM provisioning and automatic removal of departed users add an integration with the IdP, lifecycle tests and an offboarding process that must be proven.Start with sign-in only, then add SCIM as a separate phase. Define which events (create, change, disable) must propagate.
Attribute and claim mapping complexityEach SAML attribute or OpenID Connect claim used for usernames, emails, groups or roles needs a rule, a default and a test case. Custom transforms are the hardest to maintain.Limit mappings to the attributes GitLab needs. Prefer standard claim names and avoid custom transformation logic.
Number of GitLab roles and groupsEvery group-to-role mapping must be designed, approved and tested. Overlapping groups create ambiguous access outcomes that take time to resolve.Adopt a standard group naming scheme in the directory. Map a small set of roles and document one owner for each mapping.
Deployment modelA single node is the simplest target. High availability, Kubernetes deployments and air-gapped networks add load balancer, certificate, DNS and offline-package steps that the identity design must account for.Confirm the reference architecture for your user count first. Keep identity configuration in one place so it can be reproduced on each node or cluster.
Client certificate or smart card requirementsCertificate-based sign-in needs trust chain setup, revocation handling, device testing and user enrollment support, which is largely outside GitLab itself.Confirm early whether smart card or certificate sign-in is mandatory or optional. Limit it to a defined user group where possible.
Compliance evidence needsAssessors often ask for access approvals, configuration records, mapping reviews and change history. Collecting that evidence must be designed in, not added at the end.Agree the evidence list before build. Keep mapping definitions and configuration under version control with review records.
Number of environments to testEach environment (test, staging, production, disaster recovery) needs its own IdP registration, redirect URIs, certificates and test users. Every extra environment repeats configuration and verification.Use a minimal environment chain and a staged pilot group before cutover. Keep the same configuration template across environments.
Recurring work after go-liveCertificate and client secret rotation, directory group changes, IdP metadata updates and regression tests after each GitLab upgrade all recur for the life of the system.Set rotation dates and owners at handover. Automate regression checks for sign-in and group mapping and run them before each upgrade.

GitLab SSO hardening and two-factor enforcement

Once GitLab trusts an external identity provider, the sign-in path becomes the main attack surface for the instance. The cards below cover the controls that keep that path strong, from enforcing two-factor authentication and retiring ordinary password sign-in to protecting bind credentials and limiting who can change authentication settings. Each one names a risk and the check your team should run before and after the change.

Two-factor enforcement on the chosen sign-in path

Two-factor authentication must apply to the path users actually take, whether that is the identity provider through SAML or OpenID Connect, or GitLab's own login for LDAP. Confirm in the instance settings that the second factor is required for every account that can sign in, including accounts created by group sync. Check it with a test user from each group: sign in through the intended path, confirm the second factor is prompted, and confirm that an account without a second factor is blocked from completing sign-in.

Limiting local password sign-in

When GitLab is federated, ordinary users should not also hold a local password that bypasses the identity provider's controls, lockout rules and session policy. Decide whether password sign-in stays available for regular accounts or is disabled, and document the decision with the identity team. Test it by attempting a local password sign-in as a federated user and confirming it is refused, and confirm the identity provider remains the only route for those accounts.

Tested break-glass administrator

A break-glass administrator is a local account kept for the case where the identity provider, its certificate or the network path to it fails. Keep its password in a sealed, access-logged store, enable a second factor on it, and keep it out of group sync. The risk is a locked-out instance during an outage or an unused account that nobody remembers. Run a scheduled test that signs in with this account on a non-production instance and records the result, and confirm the account is still listed in your access review.

Protecting client secrets and bind credentials

OpenID Connect and SAML providers use client secrets or certificates, and LDAP uses a bind account password. These values belong in the instance configuration and secrets handling, not in shared documents, chat or code repositories. Confirm that the configuration file holding them is readable only by the root and administrative accounts, that backups of that file are encrypted, and that the bind account has read-only directory rights limited to the search base GitLab needs. Rotate them on a schedule and after any administrator changes.

Restricting who can change authentication settings

Changes to sign-in providers, group sync filters and two-factor requirements can open the instance to unintended accounts, so the number of people who can make them should be small and named. Limit the administrator role to the identity and platform owners, review that list against the identity provider's own admin roles, and enable audit logging for authentication changes. Check by making a test change with a non-administrator account and confirming it is refused, then confirming the change appears in the audit record.

Hardening guidance and personal token review

GitLab's hardening documentation covers application settings, configuration files and the operating system, and it is organized around NIST SP 800-53 oriented controls. Treat it as a checklist to roll out gradually, not as a single change. Separately, review personal access tokens created at sign-in or by users, because long-lived tokens outlive the access reviews that remove an account. Set expiry and scope limits where the instance allows them, and check the token inventory after each offboarding cycle.

How to test GitLab SSO logins and failure paths before go-live

Test every login path and every failure path against your identity provider before users depend on GitLab for sign-in. A successful login for one administrator proves very little. The go-live test plan should cover the full set of user states your directory produces, the ways access should be refused, and the recovery route you will use if the identity provider fails. Write the plan before the configuration is finished, so each case has an expected result that the team agreed in advance. Start with the happy path using dedicated test accounts in the directory. Include a brand-new user who has never signed in, so you can confirm that account creation, username mapping and email attributes behave as designed. Include an existing GitLab user, and include one test user in each group that maps to a GitLab role or group membership. For each mapped group, check the role the user receives in GitLab, not only whether the login succeeds. Mismatched roles are the most common defect found at this stage, and they are easy to miss when only an administrator account is tested.

Next, test the negative path. Confirm that a directory user who belongs to none of the permitted groups cannot sign in or cannot reach any project, depending on how your design handles unmapped users. Test a disabled directory account and confirm that GitLab refuses it. Test an expired or revoked credential, such as a password that has been reset in the directory or a session that has been terminated. For SAML, test a request signed with a wrong or outdated certificate, and confirm that GitLab rejects the assertion and logs a clear error. The exact error text and log location differ by authentication method, so record what your version actually shows and do not assume it from documentation alone. Account linking needs its own cases. Create a local GitLab account with the same email address or username as a directory user, then attempt the directory login. Decide in advance whether the existing account should be linked, blocked or renamed, and verify that the result matches the decision. Also test the break-glass path: confirm that the designated emergency administrator can sign in with a local credential while the identity provider is unavailable, that this access is logged, and that the credential is stored where only the authorized people can retrieve it. Then test two-factor enforcement by creating a new account and confirming that GitLab requires enrollment before the user can reach projects.

Offboarding is where many designs fail quietly. Remove one test user from the directory, then remove another from a mapped group, and check what happens in GitLab for each. Your design determines the expected outcome. Some organizations expect the account to be blocked at the next sign-in, others expect group memberships to be removed by sync, and others rely on a separate provisioning process through SCIM. Confirm which of these applies to your configuration, and check whether active sessions and personal access tokens are affected. A removed group membership that leaves a live token working is an access gap, so include token behavior explicitly in the test record. Test what happens when the identity provider cannot be reached. Turn off or block the directory endpoint in a non-production environment and attempt sign-in. Confirm that users see an understandable message, that no account is silently created or changed, and that break-glass access still works. Record how long existing sessions remain valid under that condition, because that duration is a design choice you should confirm with your own identity team rather than assume.

Record every result with the date and time, the test account name, the expected outcome, the actual outcome, and the GitLab version under test. The version matters because authentication behavior can change between releases, and the GitLab upgrade paths require planned stops, so each stop is a point where the tests must run again. Keep the results with the change record so that auditors and your security team can trace what was verified and when. Rerun the full suite after every GitLab upgrade, including patch releases that touch authentication, and after every certificate rotation for SAML, every client secret change for OpenID Connect and every bind credential change for LDAP. A suite that passed before a rotation proves nothing about the rotated configuration. Before go-live, agree on who signs off each result. The identity owner should confirm directory-side outcomes, the GitLab administrator should confirm application-side outcomes, and the security lead should confirm the negative and break-glass results. If you engage a partner for this work, ask for the written test plan, the result log format and the rerun procedure as deliverables, so the evidence stays with you after the engagement ends.

What to monitor, back up and document after GitLab SSO is live

Going live with GitLab SSO is the start of an identity dependency that changes over time. The items below are the recurring checks, records and tests that keep sign-in working as certificates expire, groups change and GitLab releases move forward.

Sign-in failures and provider reachability

Watch authentication failures in GitLab logs and track whether the identity provider endpoints, such as the LDAP server or SAML and OpenID Connect metadata and token URLs, are reachable from every GitLab node. A rise in failures after a network or DNS change often shows up here before users report it. Set alerts for these signals and confirm who receives them and who can act on them.

Credential and certificate expiry dates

Record the expiry dates of SAML signing and encryption certificates, OpenID Connect client secrets, and the LDAP bind account password or credential. Each one can stop sign-in without warning when it lapses. Store the dates in your normal renewal calendar, name an owner for each credential, and confirm with your identity provider team how rotation will be coordinated with the GitLab configuration.

Group mapping register

Keep a written register that links each identity provider group to its GitLab group, role and any sync setting. Access decisions depend on this register, so it should change only through an approved request. Review it when teams reorganize, when a project is retired and after each identity provider change, and compare it with the live GitLab group membership to find drift.

Configuration and secrets backups

The GitLab backup documentation advises saving the configuration and secrets files separately from the database backup. The secrets files hold the keys needed to read encrypted data, and the identity settings live in gitlab.rb and related files. Confirm that these files are copied to a protected location on a schedule, and that the copy is included in restore tests.

Identity regression tests after upgrades

GitLab requires upgrades to pass through required upgrade stops, so an upgrade plan may span several releases. Rerun your sign-in, group sync, role mapping and two-factor tests at each stop and before users return to the instance. Treat a failed identity test as a blocker for the upgrade, and record the results alongside the upgrade change record.

Administrator rights over authentication

Review which people can change authentication settings, identity provider integrations, sign-up rules and administrator roles. Changes to these settings can grant access to the whole instance, so limit the list to named people, record each change, and remove access when staff leave or change duties. Compare the list with your privileged access policy at a defined review point.

Operating runbook handover

Write a runbook that lists the integration design, configuration locations, credential owners, renewal dates, test cases, alert destinations and the escalation path to the identity provider team. Hand it to the team that will operate GitLab and test it with someone who did not build the integration. Update it whenever the design, owners or upgrade steps change.

GitLab SSO questions buyers ask before hiring help

How much does GitLab SSO integration cost?

The cost depends on the number of identity sources, the protocols involved and how much of the identity team's time the project needs. A fixed-scope quote follows from a written scope, so DeployOpen does not publish a price list. Cost components are the discovery and design work, configuration in GitLab and the identity provider, testing with real users, documentation and handover. Most of the one-time cost is design and testing. Recurring cost is limited to whatever you later choose to add, such as ongoing support or a retainer. Ask any provider for a quote that lists each protocol, each group mapping rule, the test cases and who performs the identity provider changes.

How long does it take to connect GitLab to an identity provider?

Duration depends on how many identity sources you connect, how clean your group structure is and how quickly your identity team can make changes. A single SAML or OpenID Connect integration with simple group mapping is much shorter than a project that combines LDAP or Active Directory group sync, SCIM provisioning and smart card authentication. Timelines also depend on change approvals, test accounts, and how many environments (test, staging, production) you run. Ask for a timeline in the written scope that names the dependencies on your side, including identity provider access and a maintenance window for the cutover.

Can our own team set up GitLab SSO without outside help?

Yes, many teams configure GitLab's OmniAuth providers, LDAP settings and group mapping themselves, especially when they already run GitLab administration and an identity platform. The risks lie in the details: attribute mapping, how existing accounts are matched, and how a lockout is recovered. Decide whether your team has someone who can own the identity provider side, test failed logins, and keep the configuration in version control. If not, a fixed-scope engagement can cover design, build and handover so the work does not stall while your team is busy with other projects.

What does the identity team and GitLab administration need to provide?

The identity team usually provides application registration or client configuration in the identity provider, the attribute and group claims GitLab needs, test users, and approval for changes to production sign-in. GitLab administrators provide access to the instance configuration, the ability to restart services, and decisions about which users and groups map to which roles. Both teams should agree on who owns the mapping rules after go-live. Put these responsibilities in the written scope so that sign-in testing is not blocked by a missing account or a closed change window.

Do SCIM and group sync require a higher GitLab tier?

Confirm this against the GitLab pricing page and ask for written confirmation before you buy. The pricing page lists which features belong to each tier for self-managed installations, but feature availability can change between releases, so the tier needed for SCIM provisioning and group sync should be stated in your scope and checked against the version you will run. Ask the provider to name the exact features, the tier each one requires and the GitLab version used for the check.

Is Kerberos or smart card authentication worth the extra effort?

Only if your environment already depends on them. GitLab Self-Managed supports Kerberos and smart card authentication, but each one adds infrastructure: keytabs or certificate authorities, client configuration, network paths to domain controllers or card infrastructure, and testing across browsers and Git clients. Those layers multiply the test matrix. If your policy requires smart cards for staff access, the effort is justified. If you only want fewer passwords, SAML or OpenID Connect with two-factor enforcement often covers the need with less work. Ask for a short feasibility review before committing to either option.

How do we keep a local administrator account when SSO is enabled?

Keep at least one local administrator account with a strong, unique password and two-factor authentication stored in a sealed, audited location, so you can sign in if the identity provider or the SSO configuration fails. Test that the account works before enabling SSO enforcement, and document who may use it and how use is logged. The exact steps for preserving local sign-in depend on your GitLab version and configuration, so confirm them against the authentication documentation for that release during design.

What happens to existing local accounts when SSO is enabled?

Existing local accounts keep their credentials unless you change the sign-in settings, and an account may need to be linked or matched to its identity provider identity before users can sign in through SSO. Duplicate accounts are a common problem when a user has both a local login and an SSO login with the same email address. Before enabling SSO, review how accounts are matched, decide which accounts will be disabled or converted, and communicate the change to users. Ask the provider for a written account migration plan that includes a rollback path.

How DeployOpen scopes, builds and hands over GitLab SSO work

DeployOpen plans, implements, integrates, documents and supports self-hosted open-source platforms inside your own infrastructure, including the identity connections that sit in front of GitLab. Engagements are fixed-scope, with scope and deliverables agreed in writing before work starts, and ongoing support is available as a retainer.

How we scope

  • We list which identity sources are in play, such as Active Directory, LDAP, an existing SAML or OpenID Connect provider, or a provider that will send SCIM provisioning.
  • We confirm which sign-in methods must stay available, including whether a break-glass local account is required.
  • We agree in writing how group sync and group-to-role mapping will work, and which groups are in scope.
  • We record which GitLab edition and tier the identity features depend on, and confirm that with the vendor before work starts.

How we build

  • We configure the chosen connection on a non-production GitLab instance first, using the authentication methods your installation supports.
  • We test sign-in, attribute mapping, group sync and two-factor enforcement with named test accounts that match your real user population.
  • We check removal behavior: a user removed in the identity provider should lose GitLab access as the agreed design specifies.
  • We review the configuration against the hardening guidance in scope and record every setting we change in the gitlab.rb file or admin area.

How we hand over

  • You receive a written configuration record covering each identity source, mapping rule, provisioning setting and fallback path.
  • We provide runbooks for adding a group, rotating the identity provider certificate or secret, and recovering from a lockout.
  • We walk your administrators through the test results, the known limits of the chosen design and the items that stay with your team.
  • Handover includes a list of open decisions and the owner for each, so nothing is left implied.

How we support

  • Ongoing support can cover identity configuration reviews after GitLab upgrades, since authentication behavior can change between releases.
  • Retainer work can include checking that certificates, secrets and sync jobs keep running and that group mappings still match your directory.
  • Changes to identity sources after handover are scoped and quoted separately, so the written record stays accurate.
  • Confirm with DeployOpen during scoping exactly which support activities your retainer includes.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.