Feature Wiki

Information about planned and released features

Tabs

Add none authentication method to disable web login while preserving internal user functionality

If you need any help in filling out this wiki page, please have a look at the page ’How To Suggest A New Feature’.
You can remove the editing notes (paragraphs in italics) after having created the request (same with this block).
Please don't forget to complete the metadata (‘Status of Feature’) in the right column after having created the page.

1 Summary

Introduce a new authentication method "none" that permanently disables web login for an account while keeping it fully functional for internal purposes such as owning Cron Jobs. Additionally, if no user has the ilias-auth/local method assigned anymore, the local web login form can be hidden entirely. The main goal is to reduce the attack surface for needed local users (like root or cron).

2 Problem Statement

System or technical users (e.g. a "root"-style administrative account)) must currently be assigned an existing authentication method such as ilias-auth/local, even though they are never meant to log in interactively via the web in normal operation mode. This means such accounts always retain a theoretical web login path — protected only by password strength — which unnecessarily increases the attack surface. There is currently no way to explicitly and permanently mark an account as "internal use only," nor to hide the local login form once no account actually relies on it. This forces security aware admins to implement workarounds like "hiding" the web login form, deactivating the root user and creating another cron user with lowest permissions. The latter again is then able to login via the web form, even if it is only used for internal cron purposes.

See also discussion in Mantis

3 Concept

3.1 Impact on existing functionality

Today, every ILIAS user must be assigned an auth mode (Ilias-Auth/local, LDAP, SAML, OIDC, …). There is no first-class way to say "this account exists, but must never succeed a web login." This feature adds "none" as a regular entry in the same list as Ilias-Auth, LDAP, OIDC, SAML, Shibboleth, etc. Administrators will see and select it exactly where they already manage a user's auth mode.

3.2 How existing features are used differently

  • Assigning auth_mode = none to a user is a new, explicit way to "lock" an account against interactive web login, without deactivating the account.
  • If, after this change, no active user remains with the ILIAS-Auth mode, the standard username/password login form on the start page can be automatically hidden. It's no longer required because all users are either authenticated by an external IdP or have the "none" auth method set.

3.3 UI components

  • No new screens. The existing auth-mode dropdown (admin auth settings, per-user account settings) gains one more option.
  • The login page conditionally omits the standard login form block, based on whether any active ILIAS-Auth user remains — a generalization of a mechanism that already exists for Shibboleth-only setups today. The resulting page is simply the existing page minus the username/password fields.

3.4 Underlying logic changes

  • A new auth provider is added to the existing pluggable auth-provider framework. Its authentication always fails — no credential check for a "none" user can ever succeed, by design.
  • CLI/Cron acceptance check: Cron jobs authenticate as a real user via the command line. Today, this CLI authentication path only accepts users with the ILIAS-Auth mode. This check needs to be extended so that, in addition to ILIAS-Auth, the new "none" mode is also accepted as a valid mode for CLI/cron authentication — provided the user is still active. This extended check applies only to the CLI context; the web login form and other network-facing entry points are unaffected and continue to reject "none" users. This is the one place where "auth method" and "interactive web login" are deliberately decoupled, and it's the most security-sensitive part of the change.
  • The check for "does an active ILIAS-Auth user still exist" needs to be added to control login-form visibility, following the existing Shibboleth pattern.
  • Admin settings must explicitly prevent "none" from being selectable as the system default auth mode, since that would lock out all web login entirely.

3.5 Data structures / compatibility

  • The auth mode is stored as free text, not a fixed database enum —no schema migration required. This keeps the change low-risk and fully backward compatible; existing installations are unaffected unless an admin actively assigns "none" to a user.
  • No impact on object ownership, which is already fully decoupled from auth mode.

3.6 Components involved

  • Authentication framework (auth constants, provider, provider factory, CLI auth factory)
  • Login/start page rendering
  • User administration (active-user-per-auth-mode lookup)
  • Cron/CLI entry point (indirectly, via the auth exception)
  • Language files
  • Admin auth settings screen

3.7 Dependencies

None on external software. The design reuses ILIAS's existing pluggable auth-provider pattern (same mechanism as LDAP/SAML/OIDC providers).

3.8 Technical specialties worth noting

  • ILIAS's authentication framework already contains a dedicated constant for an "inactive" auth mode, along with a matching error message intended for login attempts under that mode. However, this was never wired into the actual authentication dispatch logic — it's flagged in the code as unused/dead. This shows the same idea was considered once before but never carried through to a working implementation; this feature effectively finishes that earlier, abandoned attempt using the existing, currently unused building blocks.

3.9 Risks

  • Break-glass scenario: If external IdP-based login (OIDC/SAML/Shibboleth/LDAP) stops working for any reason, local login for the system-admin (root) must become available again. But with this feature, if the admin account's auth mode is set to "none", it can't login  to fix the issue. So, the break glass procedure in this case is covered by a DB call to change the root user's auth_mode back from "none" to ILIAS-Auth, in order to regain access to the web login form at all. This should be documented.

4 User Interface Modifications

4.1 List of Affected Views

  • Login Page (start page) — (public entry page, no breadcrumb): Standard username/password login form is conditionally hidden if no active ILIAS-Auth user remains. No new view — existing page, same mechanism as the current Shibboleth-only case. 
  • Edit User — Administration > User Accounts > Edit User (Login data section): The existing "Authentication Mode" dropdown gains a new selectable option, "none".
  • Authentication Settings — Administration > Authentication Settings > Settings: The system default auth mode setting must reject/exclude "none" as a valid selection.

4.2 User Interface Details

{ For each of these views please list all user interface elements that should be modified, added or removed. Please provide the textual appearance of the UI elements and their interactive behaviour. }

4.3 New User Interface Concepts

None. This feature reuses existing UI patterns

4.4 Technical Aspects

  • Touches the authentication framework, user administration, the admin authentication settings screen, the login page, and language files. No external dependencies — reuses ILIAS's existing pluggable auth-provider pattern. auth_mode is stored as free text, so no schema migration is needed; the change is purely additive.
  • Security: none always fails via the standard authentication dispatch (web, WebDAV, SOAP), so no bypass risk there. The extended CLI/cron acceptance check must stay scoped to the CLI context and be covered by regression tests.
  • Performance: negligible — one extra "active ILIAS-Auth user exists?" check on login page render, same pattern as the existing Shibboleth check.

5 Non-Functional Implications

5.1 Security

No new endpoints are introduced. The feature adds a new auth mode and provider to the existing pluggable auth-provider framework, and extends the existing CLI/cron acceptance check to also accept none. This extension relies on a separation between CLI and web/WebDAV/SOAP contexts that already exists today (the CLI path already special-cases local authentication independently of the standard dispatch) — so no new attack vector is introduced beyond what the current architecture already relies on.

5.2 Privacy

None. This feature does not introduce any new personal data field.

5.3 Accessibility Implications

None. This feature only adds a value to an existing dropdown component and reuses an existing conditional-rendering pattern for the login form. No new UI components or interaction patterns are introduced, so no new accessibility considerations arise.

6 Process Information

6.1 Involved Authorities

6.2 Contact

Person to be contacted in case of questions about the feature or for funding offers: [info@pwurbs.dev]

6.3 Funding

Funding status and funding parties are listed in the block 'Status of Feature' in the right column of this page.

If you are interested to give funding for this feature, please get into contact with the person mentioned above as 'Contact'.

7 Discussion

8 Implementation

Feature has been implemented by {Please add related profile link of this person}

8.1 Description and Screenshots

{ Description of the final implementation and the changed behaviour in the related components. Please add screenshots to visualise the changes if possible. }

8.2 Test Cases

Test cases completed at {date} by {user}

  • {Test case number linked to Testrail} : {test case title}

8.3 Privacy

Information in privacy.md of component: updated at {date} by {user} | no change required

8.4 Approval

Approved at {date} by {user}.

Last edited: Yesterday, 18:28, [info@pwurbs.dev]