Skip to content

NethVoice: pluggable authentication methods with SAML2 Single Sign-On #8142

Description

@edospadoni

Description

NethVoice CTI users can currently authenticate only with their account-provider password (PAM/LDAP bind). Organizations using a federated Identity Provider (e.g. universities with Shibboleth/SAML2, as in legacy NethVoice 7 deployments integrated with the Cineca IdP) need users to log into NethVoice CTI through the IdP, without typing a password in NethVoice.

Goal: introduce a generic, pluggable "authentication method" in the NS8 NethVoice module: SAML2 now, ready for OIDC later, with minimal changes to the core components.

Design

Two orthogonal concepts:

  • Account provider (existing, unchanged): where users live (NS8 OpenLDAP or external LDAP/AD). Still required with SSO: it remains the source of user records, extensions and CTI profiles.
  • Authentication method (new): how users prove their identity: password (default, current behavior) or saml2 (delegated to an external IdP). The SAML identity attribute (e.g. uid, eppn) must match the account-provider username.

Trusted-mint contract (protocol agnostic):

  1. A Shibboleth SP container, generated from the module settings, authenticates the user against the IdP.
  2. Traefik guards a dedicated mint route (POST /api/sso-login) with forwardAuth against the SP check endpoint; the verified identity is injected as Remote-User (client-supplied values are overridden, the SP fails closed on spoofing).
  3. nethcti-middleware forwards the identity with a shared secret to nethcti-server, which mints the token without a password.

Adding OIDC later only requires a new front door (e.g. oauth2-proxy) speaking the same contract.

Security

  • Per-install high-entropy secrets generated by the module (mint-authorization secret and a separate HMAC token key), never shown in the UI, revoked when SSO is disabled.
  • Privileged/local accounts (admin, administrator, root) always denied over SSO; optional user allowlist.
  • SP attribute filter scoped to the single identity attribute, single-attribute REMOTE_USER, optional value regex.
  • Optional IdP metadata signature verification (federation signing certificate, settable via API).
  • SSO is off by default: with authentication_method=password nothing changes.

User experience

  • Cluster-admin settings: "Authentication method" selector; with saml2: the service-provider metadata URL to register on the IdP (copy to clipboard), IdP metadata URL, identity attribute, SSO button label.
  • CTI login page: SSO button instead of the password form; https://<cti>/?login=sso starts the flow directly (like the legacy ?login=shibboleth).
  • NethLink: two-step login (host first, then credentials or SSO button based on the host authentication method); the SAML flow runs in a dedicated window and SSO accounts are stored without a password.

Validated end-to-end on NS8 with a Shibboleth SP and a SimpleSAMLphp test IdP (login, phone-island and calls working).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    nethvoiceBug or features releted to the NethVoice project

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions