Redmine LDAP and SSO integration

Redmine authenticates against LDAP natively, but SAML or OpenID Connect single sign-on depends on plugins or an authenticating reverse proxy. This page covers the decisions, build sequence, checks and handover for both.

On this page

Redmine LDAP integration starts with two separate login paths

Most requests for Redmine identity integration start with the same situation: the IT or security team needs staff to sign in with their directory credentials, and they want Redmine to create an account the first time someone logs in instead of an administrator adding each user by hand. The first decision is therefore which login path the organization actually needs. LDAP authentication is part of core Redmine, and the project's feature list states that Redmine authenticates against LDAP directories natively. Single sign-on through SAML or OpenID Connect is a different matter. It is not part of core Redmine. It depends either on a plugin or on an authenticating reverse proxy placed in front of the application. Those are two separate mechanisms with different owners, different failure modes and different upgrade risks, so they should be scoped separately even when a single project covers both.

The harder part is rarely the first successful login. Teams usually discover the difficulty in four areas. The first is group-to-role mapping: directory groups must translate into Redmine roles that govern project access, and that mapping needs an owner and a review cycle. The second is account deactivation when people leave. A directory account that is disabled does not automatically prevent access through every path, so the team must confirm how Redmine handles a user who no longer exists in the directory. The third is API keys. The Redmine REST API authenticates with HTTP basic authentication or a per-user API key, and an API key can work independently of the browser login flow. An integration that relies only on the directory login may leave API access open after a person has left. The fourth is plugin support. Plugins are tied to the Redmine release line, and the team must check compatibility before any upgrade, not after.

Before building anything, confirm several points with the people who will run the system. Ask which directory service and which attributes will supply identity, whether the directory exposes group membership in a form Redmine can read, and who approves changes to group mappings. For SSO, identify the identity provider, the protocol it supports, and whether the plugin or reverse proxy option has been reviewed against the Redmine version the organization intends to run. Check whether the release line in use is still receiving security updates. The download page describes 7.0.x as the fully supported line, 6.1.x as receiving only bug fixes and security updates, and 6.0.x as receiving only important security updates, while 5.1.x and older are unsupported. A login integration built on an unsupported release inherits that exposure.

A practical sequence follows from these decisions. Stand up LDAP authentication in a non-production copy first, test first-login account creation with a few accounts from different groups, and verify that each group lands in the expected role. Then test the departure case: disable a test account in the directory, confirm the browser login fails, and check whether an existing API key still works. Only after those checks should SSO be added, because a reverse proxy or plugin changes the login path for every user. Record which path is authoritative for each account type, including any local administrator accounts kept for recovery. Those records are what an auditor or a new administrator will ask for later.

Scope and cost follow from the answers to those questions. The software itself carries no license fee, since Redmine is released under the GNU General Public License v2, so the work to be quoted is configuration, mapping design, testing, any plugin selection and the ongoing administration of directory and SSO changes. Ask any implementation partner to state in writing which login paths are in scope, how group mappings will be documented and reviewed, how departures and API keys will be handled, and which Redmine release line the work will target. Confirm the specific LDAP settings, plugin names and their compatibility statements with the vendor or plugin maintainer before committing to a design, because those details are not established here.

Which Redmine settings and extension points carry identity

Redmine's identity behavior is set by a small number of places: the authentication source, the user and group records it writes, project roles, API keys, and any SSO plugin or reverse proxy in front of it. Each one can grant or block access independently, so review them together before going live.

Built-in LDAP authentication source

Redmine authenticates against LDAP natively. An administrator defines an authentication mode under the administration area, sets the directory host, port, encryption, base DN, and a bind account, and tests the connection before enabling it. Check which attribute maps to login, first name, last name, and email, because these fields are copied into Redmine's user records.

On-the-fly user creation

When this option is enabled, Redmine creates a local account the first time a directory user signs in, instead of requiring an administrator to create it in advance. Decide whether new accounts should be active immediately or held for approval, and confirm which directory groups or filters are allowed to sign in, since the option alone does not limit who can authenticate.

User and group records

Redmine stores each directory user as a local user record linked to its authentication source, and directory groups can be mirrored as Redmine groups. Local records persist after a person leaves the directory unless they are locked, so plan how deprovisioning is handled and confirm how group membership is refreshed at each login.

Role assignment through projects

Access is granted through roles assigned to users or groups within each project, not through directory membership alone. A user who authenticates successfully but has no project membership sees little or nothing. Map which directory groups should receive which project roles, and review inherited permissions whenever a group grants access to several projects.

REST API keys alongside browser login

The REST API must be enabled by an administrator, and it authenticates with HTTP basic authentication or a per-user API key sent as a parameter or in the X-Redmine-API-Key header. A key works even when browser sign-in goes through LDAP or SSO, so automated integrations keep working during an identity change. Decide who may generate keys and how they are rotated.

SAML or OpenID Connect plugin

Single sign-on through SAML or OpenID Connect is not part of core Redmine and depends on a plugin. Choose the plugin only after confirming it supports the Redmine release in use: 7.0.x is the fully supported line, while 6.1.x receives only bug fixes and security updates and 6.0.x receives only important security updates. Verify compatibility with Ruby 3.2 to 4.0 and Rails 8.1 for 7.0.

Authenticating reverse proxy headers

An alternative is to place an authenticating proxy in front of Redmine and pass the verified user identity in request headers. This shifts trust to the proxy, so the proxy must strip any client-supplied identity headers, and Redmine must be reachable only through that proxy. Test logout, session expiry, and API requests, since header-based sign-in does not automatically cover them.

Choosing between direct LDAP, a SAML or OIDC plugin and a reverse proxy

This table compares four ways to connect Redmine to a corporate identity source: direct LDAP, LDAP with accounts created at first login, a SAML or OpenID Connect plugin, and an authenticating reverse proxy. Read each row for fit, the operational work it creates and whether API key access still works. The main takeaway is that Redmine authenticates against LDAP natively, while SAML and OIDC depend on plugins or a proxy, so confirm plugin support for your target Redmine line before choosing one.

OptionWhen it fitsOperational costAPI key access
Built-in LDAP onlyStable user base where an administrator can create each Redmine account before first sign-in.Passwords stay in the directory. Admins create and disable accounts by hand, so deprovisioning depends on their process. Confirm lockout behavior.Per-user keys are issued after sign-in. Confirm that LDAP-backed users can use basic authentication on your version.
LDAP with on-the-fly creationMost directory users need access and administrators should not pre-create every account.Accounts appear at first login. Disabling a directory user does not block Redmine access by itself, so define who removes accounts.Same as LDAP only. New accounts must sign in once before a key can be created.
SAML or OIDC pluginOrganization already runs an identity provider for SSO. Choose only after confirming plugin support for your Redmine line.Plugin needs retesting at every Redmine upgrade. Passwords stay at the identity provider. Deprovisioning depends on both sides.Confirm whether the plugin still allows per-user API keys or basic authentication for automation.
Authenticating reverse proxyStandard SSO at the web layer where the proxy already fronts applications and Redmine is reached only through it.Redmine trusts identity headers, so only the proxy may reach it. Lockout and passwords sit at the proxy. Test API paths separately.Proxy login can block API clients that send keys or basic auth. Plan separate API routes and confirm before rollout.

Redmine LDAP integration step by step, from test bind to first login

This sequence takes a Redmine installation from a verified directory connection to a first pilot login, then adds single sign-on where the business needs it. Each step ends with a check you can record, so a failed test surfaces before any user depends on it.

  1. Confirm the Redmine release line and Ruby version

    Check the Redmine installation guide for the release you plan to run and the Ruby versions it supports. Redmine 7.0.x is the fully supported line, and it runs on Rails 8.1 with Ruby 3.2, 3.3, 3.4 and 4.0 listed as supported. JRuby is not supported. Your team or DeployOpen records the chosen release, Ruby version and database in the change record. Closing check: the installed release and Ruby version match the guide, and the application starts in a non-production environment.

  2. Create a read-only directory bind account

    Ask the directory team for a dedicated service account that can read the user and group objects Redmine needs and holds no write rights. Store its password in your secrets manager, and confirm the account can be disabled without affecting any person's login. Confirm with the directory team which search base the account can read. Closing check: a directory query run with that account returns the pilot test user, and the account cannot modify any directory object.

  3. Configure the LDAP authentication source over TLS

    In the Redmine administration area, add an LDAP authentication source with the directory host, port, base DN, bind account and attribute names for login, mail, first name and last name. Use LDAPS or StartTLS so credentials are never sent in clear text, and install the directory's certificate authority on the Redmine host before saving. Confirm attribute names with the directory team, since Active Directory and OpenLDAP often differ. Closing check: the source saves without error and shows the expected host and encryption setting.

  4. Test the connection and attribute mapping

    Run the connection test on the authentication source, then look up a known pilot user from the directory. Verify that login, mail address, first name and last name populate from the expected attributes, and that a user outside the search base is not found. Record any attribute that arrives empty, because a missing mail address can break notifications later. Closing check: the connection test succeeds, and the returned attributes for the pilot user match the directory record exactly.

  5. Enable on-the-fly creation for a pilot group

    Turn on on-the-fly user creation only for the source under test, and restrict who can authenticate with a directory filter or a narrow search base. Redmine creates the account at first login, so a filter set too broadly produces accounts you must later clean up. Have one pilot user sign in and watch the result. Closing check: exactly one Redmine account is created with the correct login, mail address, names and status, and no other accounts appear.

  6. Map directory groups to project roles

    Decide which directory groups should hold which project roles, then confirm whether your Redmine release maps groups natively or needs a plugin for it. Start with the pilot projects only, so access follows groups the project owners have approved. Keep role assignments documented alongside the directory groups they depend on. Closing check: a pilot user in the mapped group sees the project with the intended role, and a user outside the group has no access to it.

  7. Verify a denied login for a disabled user

    Disable a test directory account, then attempt to sign in to Redmine with it. The login should be refused and the Redmine account should show as inactive. Also check how existing API keys and open sessions for that user behave, since they can outlive a directory change if they are not handled explicitly. Closing check: the denied login appears in the Redmine log, the account is inactive, and an API request using that user's key returns an authentication error.

  8. Add SAML or OIDC through a plugin or proxy

    Single sign-on is not part of core Redmine. Choose between a maintained plugin that implements SAML or OpenID Connect and an authenticating reverse proxy that passes the verified identity to Redmine. Check the plugin's compatibility with your release before installing it, and include it in your upgrade testing. Closing check: a pilot user signs in through the identity provider and lands on the same Redmine account created by the LDAP login, and a disabled user is refused.

How to test that Redmine SSO works and fails safely

Testing Redmine single sign-on is not finished when the first login succeeds. The test plan should prove that each directory group lands on the right role, that a disabled account stops working at once, that wrong passwords and lockouts behave as policy requires, and that failures leave Redmine in a safe state. Write each case with an expected result before the test runs, and record which layer made the decision: the directory, the LDAP authentication source inside Redmine, the SSO plugin, or the authenticating reverse proxy. That record is what lets the team tell a configuration error from a design gap. Start with the happy path and the negative paths that matter most. Log in once with a test account from each directory group that maps to a Redmine role, and confirm the role, project membership and visible projects match the mapping. Then disable or remove a test account in the directory and attempt a login. Also test a wrong password several times to confirm the lockout threshold and the message a user sees. Check the first login of a brand-new directory user and confirm exactly one Redmine account appears, with no duplicate created when the user later signs in through a second path. Finally, move the same test user into a different group, log in again, and confirm the role change applies. Ask whether role changes take effect at next login or on a sync schedule, because the answer determines how long a removed privilege can persist.

Check API access separately from the browser flow. The Redmine REST API must be enabled by an administrator, and it accepts HTTP basic authentication or a per-user API key sent as a parameter or in the X-Redmine-API-Key header. Confirm with the plugin vendor or the proxy team whether an API key still works when the browser login is blocked by SSO, whether basic authentication passes through the proxy at all, and whether a disabled directory account also loses its API key access. Do not assume any of these. Record the answers in the test plan, because they decide which service accounts and integrations must be reviewed when a user leaves. Logout needs its own test. Confirm that signing out ends the Redmine session and, where the plugin or proxy supports it, the single sign-on session at the identity provider. Open a second browser, sign in there, and check whether the first sign-out affects it. Ask the vendor or proxy team whether back-channel logout is supported, how long an idle session lasts, and whether the Redmine session cookie is invalidated server side. These are questions for the platform owners, not facts to assume from the product name.

Run failure drills in a non-production copy that matches production authentication settings. Make the directory unreachable by blocking the LDAP or identity provider address at the firewall or stopping the service, then confirm what users see and whether existing Redmine sessions keep working until they expire. Expect that some sessions continue because Redmine does not necessarily query the directory on every request. Verify this with the plugin vendor or proxy team rather than relying on the expectation. Confirm also that new logins fail closed, with no fallback to a local password that bypasses the directory unless that fallback was deliberately approved. Test certificate expiry next. Use a test certificate with a short validity period on the identity provider or the LDAPS endpoint, let it lapse, and observe whether logins fail with a clear error and whether administrators receive an alert before expiry. Record the renewal steps and who owns them. The drill should also confirm how the reverse proxy handles an expired or mismatched certificate on its upstream connection, since that behavior is often different from the browser-facing certificate.

Decide in advance what the team does with existing sessions after a failure drill. Options include ending all sessions on a forced change, relying on a short idle timeout, or accepting a defined window of continued access. Each option has a cost in user disruption and a risk in delayed revocation, and the choice belongs to the security owner, not the test team. Document the chosen behavior and test it, so a future upgrade or plugin change that alters it is caught. Finish with a short evidence pack: the test case list, expected and actual results, screenshots or logs for the disabled account and lockout cases, and the written answers from the vendor or proxy team. Keep the list with the change record. Testing once at go-live is not enough, so schedule the same cases after each Redmine upgrade and each plugin or proxy update, because compatibility on Redmine 7.0 and later versions depends on the specific plugin release you run.

What drives the effort of Redmine identity integration

This table lists the factors that change how much work a Redmine LDAP and SSO integration takes, with a way to keep each one contained. Read each row as a question to answer before scoping: the more of these factors are open, the more the plan needs to fix them early. No single factor sets the effort on its own, so review them together.

DriverWhy it changes effortHow to keep it down
Number of directories and domainsEach LDAP directory or domain needs its own bind account, search base, attribute mapping and failure test. Users who exist in more than one source raise matching questions for on-the-fly account creation.Name one authoritative directory for Redmine accounts. Limit the first release to a single search base and document any second source as a later phase.
Nested or multi-forest groupsRedmine group membership checks depend on how nested groups and cross-forest trust are resolved. Recursive lookups can be slow and hard to verify against the directory.Map Redmine groups to a flat set of directory groups. Confirm with the directory team which nesting levels Redmine will read, and test a sample user from each forest.
Number of project roles to mapEach directory group that grants a project role needs a mapping rule, a test case and an owner. Role sprawl often surfaces late, when a project lead asks for an exception.Start from the roles already defined in Redmine and map only those. Keep a short written table of group-to-role rules and require a sign-off for each new rule.
SAML or OIDC plugin count and target-line compatibilitySingle sign-on is not part of core Redmine, so it depends on plugins. Each plugin must support the chosen Redmine line and Ruby version, and each one adds upgrade checks and its own configuration.Fix the plugin list before design starts. Confirm each candidate against the target Redmine 7.0.x line and Ruby version, and keep to one SSO plugin unless a requirement forces a second.
Reverse proxy complexityWhen SSO is handled by an authenticating reverse proxy, the proxy, header trust, session lifetime and logout behavior all need to agree with Redmine. Multiple proxies or load balancers multiply these checks.Use one proxy layer with a single documented header contract. Test logout, session expiry and direct access attempts that bypass the proxy before rollout.
Environments (test, staging, production)Each environment needs its own directory connection or test directory, identity provider registration and redirect URLs. Keeping them aligned is ongoing work, not a one-time task.Agree which environments must match production in identity settings. Use a pilot cohort in staging with a small set of test accounts before any production change.
Compliance evidence requirementsAssessors often ask for proof of account provisioning, group-to-role mapping, deprovisioning and access reviews. Producing that evidence from a half-built setup takes extra time.Ask the assessor or internal audit which evidence they need before design. Build logging and mapping documentation into the plan so evidence is captured as the work is done.

How identity integration changes across single node, HA and air-gapped deployments

On one application server, identity integration is mostly a question of whether that one host can reach the directory and trust its certificates. Redmine's native LDAP authentication connects outbound from the application process, so the server needs a network path to the domain controllers or LDAP servers on the ports you configure, and the TLS trust chain must be present on that host. If single sign-on runs through a plugin or an authenticating reverse proxy, the proxy and Redmine sit on the same machine or a short local hop, which keeps header trust simple.

What changes in this model:

  • LDAP reachability: one outbound path from the application host to each directory server, including any secondary server you list for failover.
  • TLS trust stores: the directory's certificate authority must be in the operating system or Ruby trust store used by the Redmine process, and the service account must be able to read it.
  • Proxy header trust: if a reverse proxy injects a user identity header, only that proxy should be able to reach Redmine, so trust can be limited to the local address.
  • Session stickiness: not a concern, because all requests reach one process.
  • Certificate distribution: a single host is updated by hand, but rotation still needs a dated plan.

Confirm with your directory team which LDAP endpoints and ports your security policy allows from this host, who owns the service account, and when the directory certificate expires. Confirm the exact LDAP and SSO plugin versions against your Redmine release before you test.

Securing the directory bind, sessions and API keys

Redmine LDAP and SSO integration gives the directory and the identity proxy a privileged position over who can sign in and what they can do. The controls below focus on the links that carry that trust: the bind account, the transport, the group filter, the identity headers, session lifetime and API keys. Server-wide controls such as HTTPS policy, file upload limits and backups are covered in the Redmine security hardening topic.

Read-only bind account and its password

Redmine uses a bind account to search the directory for users and groups. Create a dedicated service account with read access only to the user and group objects Redmine needs, and nothing that allows writes or password resets. Store its password in the Redmine configuration file with file permissions limited to the service user, and plan a rotation date that the directory team and Redmine administrators both own.

LDAPS or StartTLS with certificate validation

Credentials and user passwords travel to the directory during the bind and login, so the connection must be encrypted. Use LDAPS on its dedicated port or StartTLS on the standard port, and make sure the Redmine host trusts the directory's certificate authority and checks the hostname. Confirm that certificate verification is not disabled in the authentication source settings, because a test workaround often stays in production.

Restricting which groups can sign in

A directory search that matches every user account can open Redmine to people who should never have access, including leavers whose accounts are still enabled. Limit sign-in with a group filter or an equivalent attribute check, and test it with one account from inside the group and one from outside. Review the filter whenever directory group structures change, since Redmine will not notice that a group was renamed.

Identity headers from the trusted proxy only

When a reverse proxy authenticates users and passes their identity to Redmine in a request header, any client that can reach Redmine directly could forge that header. Restrict the application so it accepts identity headers only from the proxy's address, strip those headers at the edge for all other requests, and test with a direct request that sets the header yourself. Confirm the exact header handling with the plugin or proxy module you choose.

Session timeout and single logout

Single sign-on removes the password prompt in Redmine, so the session lifetime becomes the main control on how long a left-open browser stays signed in. Set an idle timeout that fits your risk profile, and confirm that signing out of Redmine also ends the identity provider session when the plugin supports it. Test logout from a second application that uses the same identity provider, because partial logout is a common gap.

API key issuance and rotation

The Redmine REST API can authenticate with a per-user API key, which can act with that user's permissions and does not expire by default. Decide whether users may generate their own keys, confirm whether the REST API is enabled at all, and set a procedure for revoking keys when accounts are disabled or people change roles. Keys passed as query parameters can appear in logs, so require the request header in any integration you build.

Service accounts for integrations

Scripts and external systems that call the REST API should not borrow an administrator's personal key. Create a dedicated Redmine user with only the project roles the integration needs, generate its key under that account, and document who owns it. This keeps audit trails readable and lets you rotate the integration credential without disrupting a person's own access.

What to monitor, back up and document after Redmine SSO goes live

The operations team owns the Redmine LDAP and SSO integration from the day it goes live, and the first job is watching the directory connection itself. Redmine's native LDAP authentication depends on a live bind to the directory, so the team should alert on failed binds to the directory server, on timeouts against the domain controllers or LDAP servers named in the authentication source, and on a sudden rise in failed login attempts. A spike in failures can mean a directory outage, a changed service account password, a certificate that has expired, or a password-spraying attempt against Redmine accounts. Log entries from the Redmine application server and from the directory side should be reviewed together, because either log alone may not show the cause. Confirm with your directory team which events they already collect and which ones must be added for this integration.

Redmine can create user accounts on the fly the first time a directory user signs in, so the team also owns the list of those accounts. Review newly created users on a regular schedule and compare them against the directory groups that are meant to have access. Pay attention to the accounts that receive administrator rights, the accounts that land in groups mapped to project roles, and any account whose directory entry is disabled or missing. Deprovisioning is the other half of this work. When a person leaves, disabling the directory account stops new sign-ins, but it does not remove existing Redmine memberships or assigned issues. Agree in advance who locks or deletes the Redmine user, who reassigns open issues, and how quickly that happens. Ask your partner or internal team to show how the chosen plugin or reverse proxy handles a disabled directory account, because behavior differs between setups.

Each Redmine upgrade and each plugin update requires a new test of the integration. The upgrade guide calls for copying configuration, uploads and third-party plugins to the new installation, then running the database migration and the plugin migration task before clearing the cache and restarting. The SSO plugin is one of those third-party plugins, so it must be rechecked every time: confirm that it is compatible with the target Redmine and Ruby versions, that its migrations completed, that sign-in through the SSO path still works, that group-to-role mapping still applies, and that LDAP sign-in for fallback accounts is unaffected. If the SSO layer is an authenticating reverse proxy rather than a plugin, the same test still applies to the proxy headers and the Redmine settings that trust them. Do not treat a successful application start as proof that authentication works.

Backups for this integration need to cover more than the database. Keep a copy of the Redmine configuration files, the authentication source settings, the LDAP bind account details held in a secrets store, the SSO plugin configuration and its certificates or client secrets, and the reverse proxy configuration if one is used. Store these with the database and uploaded files, and test a restore into a non-production environment at least once after the integration is configured. Documentation is the last part of the handover. Write down the group-to-role map, which directory groups grant which Redmine global and project roles, and who approves changes to it. Write a runbook for directory outages that states what users see, which fallback accounts exist, who can enable them, how they are audited, and how normal sign-in is restored. Review both documents after every upgrade and after any change to the directory structure.

Questions teams ask before bringing in help with Redmine SSO

Does Redmine support LDAP without installing a plugin?

Yes. Redmine authenticates against LDAP directories natively, so Active Directory or another LDAP server can be configured as an authentication source in the administration area without a plugin. The configuration covers the server address, encryption, the bind account and the attributes used to fill in user records. Redmine can also create accounts on the first sign-in of a directory user, which avoids provisioning every user in advance. Core LDAP support does not decide which projects a user can reach. Mapping directory groups to Redmine roles is a separate design task that needs a named approver. Confirm encryption and attribute requirements against your own directory before you start, since those settings vary by environment.

Does Redmine need a plugin or proxy for SAML or OpenID Connect?

Yes, one or the other. Single sign-on through SAML or OpenID Connect is not part of Redmine core. It depends on a plugin that adds the protocol, or on an authenticating reverse proxy that completes the login and passes the verified identity to Redmine in a request header. A plugin keeps the login flow inside the application, but its code must be reviewed and kept compatible with each Redmine upgrade. A proxy moves authentication outside Redmine and adds a component to operate, patch and secure. Check that any candidate plugin supports your identity provider, the protocol version you need and the Redmine line you run. Each option changes who owns the login path during an incident.

How long does a Redmine LDAP or SSO integration take?

The duration depends on scope, and no standard figure applies across environments. The main drivers are whether the work covers LDAP only or also SAML or OpenID Connect, how many directories, domains and identity providers are involved, how much group design and role mapping is needed, and whether a plugin needs review or customization. The Redmine version and Ruby runtime already in place matter, as does network access to the directory or identity provider. Each external party that must make a change adds waiting time. Ask for a schedule that lists these dependencies explicitly and shows which ones the client must clear.

What drives the cost of Redmine SSO integration?

Redmine has no license fee, so cost comes from the people who do the work and from the components around the software. One-time costs usually include directory and group analysis, configuration, plugin selection or proxy build, testing and documentation. Recurring costs include plugin maintenance after each Redmine upgrade, certificate and identity provider changes, and administrator time for periodic access reviews. Costs rise with the number of directories, the complexity of role logic, the number of identity providers and the amount of testing against your environment. In a quote, ask for one-time and recurring lines to be separated, and ask which plugins and their future maintenance are included.

What must our team provide before an SSO engagement starts?

Most engagements need a read-only directory service account with the attributes required for login and group lookups, plus a documented group design that shows nested groups and which groups map to Redmine roles. The client also provides a non-production Redmine environment that mirrors production settings, and a named approver who signs off role mapping decisions. If SAML or OpenID Connect is in scope, the client provides an application registration with the identity provider, or access to the reverse proxy configuration. Infrastructure staff must be available to change server settings, and test accounts should cover each group. The exact list belongs in the written scope, because it depends on the directory and protocol chosen.

Can an internal team set up Redmine SSO without outside help?

Often yes for native LDAP, which is configured through settings in the administration area. The harder parts are group-to-role design, the security review of any plugin or proxy, and the upgrade path after go-live. An internal team should be comfortable with directory queries, certificate handling, Redmine administration and reading authentication logs. Teams that have done this before, have a test environment and have a named owner for approval decisions can usually proceed in-house. If SSO is involved, the deciding question is who will own the plugin or proxy through each future Redmine upgrade and each identity provider change.

What does a fixed-scope quote for Redmine SSO cover?

A fixed-scope quote follows a written scope that DeployOpen agrees with the client before work starts. It should state the directories and protocols covered, the Redmine version and hosting assumptions, and the plugin or proxy chosen and the reason for it. It should also list the group and role mapping rules included, the test cases and environments used, documentation, and knowledge transfer to your staff. Check whether it covers production cutover, rollback steps and the first upgrade after go-live. Exclusions such as ongoing support should be named. DeployOpen does not publish a price list, so the quote follows from the written scope.

How do we test SSO changes without locking out administrators?

Keep a local administrator account outside the directory and confirm it works before cutover. Test in a non-production environment with directory test accounts that cover each group, and verify that accounts are created on first sign-in with the correct attributes. Check role mapping by reviewing project membership after each test login. Also test failure cases: a disabled account, an expired password, an unreachable directory and a removed group. Document the rollback steps, and confirm with your identity team how sessions and logouts behave across the login path. Repeat the test set after every Redmine upgrade or identity provider change.

How DeployOpen scopes, builds and hands over Redmine identity integration

DeployOpen approaches Redmine LDAP and SSO integration as a fixed-scope piece of work agreed in writing before build starts. Native LDAP authentication is configured against your directory, and any single sign-on path is chosen and built to match your identity setup and your Redmine version.

How we scope

  • Confirm which directory holds the users and how Redmine should match accounts to it.
  • Decide whether users are created on first login or pre-provisioned, and which attributes map to Redmine fields.
  • Choose the SSO route: a SAML or OpenID Connect plugin, or an authenticating reverse proxy, and record the reasons.

How we build

  • Configure LDAP authentication and test bind, search and on-the-fly account creation in a non-production instance.
  • Build the chosen SSO path, including redirect URIs, certificate or key handling, and the logout behavior you specify.
  • Check every identity plugin against the Redmine 7.0 line before adoption and record any version constraints.

How we hand over

  • Document the directory settings, group and role mapping, and the steps to rotate bind credentials and certificates.
  • Provide test cases covering login, failed login, account lockout, new user creation and logout for your sign-off.
  • Walk your administrators through the configuration, fallback local login policy and troubleshooting steps before cutover.

How we support

  • Scope ongoing support as a retainer covering identity plugin compatibility during Redmine upgrades.
  • Re-test directory and SSO paths after each upgrade, plugin change or change to the identity provider.
  • Confirm with your team which support hours, response expectations and escalation paths the retainer will include.

Sources and further reading

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.