A small extension to add the SAML SSO to iTop. The extension embeds the onelogin/php-saml library and can be deployed as any other iTop extension.
The extension extends the login page and provides 2 extra pages: acs.php (Assertion Consumer Service, the return page after a successful login by SAML) and sls.php (Single Logout Service, the return page after a successful logout by SAML).
The login can be either transparently redicted to the SAML IdP server or co-exist with the traditional login/password form, as shown below:
This extension had been tested with the following Identity Providers:
Date | Version | Description |
---|---|---|
2022-04-19 | 1.1.1 | Fix issue N°5096 - SAML configuration menu restricted to administrators |
2021-08-06 | 1.1.0 | Add compatibility with iTop 3.0 |
2021-05-18 | 1.0.7 | Fix compatibility issues with iTop before 2.7.4 |
2021-03-08 | 1.0.6 | fix SAML login when using reverse proxy |
2021-01-28 | 1.0.5 | - Improved debug log. - new parameter can_logoff to enable the “Logoff menu” (disabled by default) |
2020-11-27 | 1.0.4 | Resolve problems with logout requests for Microsoft Azure (ADSF) identity providers by sending the nameId into the logout request. |
2020-11-19 | 1.0.3 | - Improved logging to log/saml.log (when debug ⇒ true) - Better compatiblity with some SAML IdP for the logout (retrieveParametersFromServer ⇒ true by default) - Configurable SAML icon in the login form (via the parameter saml_logo_url) - Better generation of the SP MetaData (taking care of pre-filling all expected values) |
2020-10-09 | 1.0.2 | Enhanced configuration wizard and better meta data generation. |
2020-07-10 | 1.0.0 | First version |
The user provisioning (i.e. creation of the user accounts in iTop) is handled not by this extension. The current version of the extension only enables the authentication of existing iTop user accounts by a SAML IdP.
ExternalUser
corresponding to the SAML users.You can use the menu “SAML Configuration” to generate the configuration for iTop as a SAML Service Provider and to import the metadata of your Identity Provider into iTop.
To configure iTop as a Service Provider (SP) follow these steps (in this order):
allowed_login_types
. By default saml
is added after form
in the list of allowed login types, meaning that the traditional login/password authentication mode remains available.
'allowed_login_types' => 'form|saml|basic|external',
If you move saml
to be the first login type, this means that the login will be automatically redirected to SAML.
'allowed_login_types' => 'saml|form|basic|external',
In that case to access iTop pages with an internal user, you have to add the parameter login_mode=form in the URL. This can be useful to connect to iTop webservices, exports, etc…
For instance <itop_url>/pages/UI.php?login_mode=form
Once the configuration is complete, it is located in the section combodo-saml
of the iTop configuration file.
It should looks as shown below:
'combodo-saml' => array ( 'strict' => true, 'debug' => false, 'retrieveParametersFromServer' => true, 'idp' => array ( 'entityId' => '', 'singleSignOnService' => array ( 'url' => '', 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', ), 'singleLogoutService' => array ( 'url' => '', 'responseUrl' => '', 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', ), 'nameid' => 'uid', 'sp' => array( 'entityId' => 'https://....', 'privatekey' => '.....', 'x509cert' => '.....', ), 'security' => array( 'wantMessagesSigned' => false, 'wantAssertionsSigned' => true, 'authnRequestsSigned' => true, 'logoutRequestSigned' => true, 'logoutResponseSigned' => true, ), ),
debug
checkbox (or set 'debug' => true,
in the configuration file). When the debug mode is enabled, more debug information is logged into the file saml.log
in the log
directory of iTop for each attemp to log in or log out. Do not turn on this setting in production since the log file is neither trimmed nor rotated and may potentially become huge.
All the possible parameters are:
Parameter | Type | Visible ? | Description | Default Value |
---|---|---|---|---|
cacheDuration | number | no | The attribute “cacheDuration” in the XML meta data of the SP. As a number of days. | 7 |
can_logoff | bool | no | Whether or not to display the “Logoff” menu in iTop to let users log off from the SAML server (and thus disconnect from all their SSO applications). | false |
contactPerson | array | no | To populate the contact information in the meta data for the IdP. Check OneLogin SAML settings for more information. | |
debug | bool | yes | Activate the SAML debug. The debug output goes to the log file log/saml.log | false |
idp | array | yes | Identity Provider Data that we want connected with our SP | |
nameid | string | yes | The name of the attribute (in the IdP response) that contains the login/identifier | uid |
organization | array | no | To populate the organization information in the meta data for the IdP. Check OneLogin SAML settings for more information. | |
saml_logo_url | string | no | The URL to the SAML logo displayed on the login page of iTop. If not present the default SAML logo wil be displayed. Specify an empty string to remove the logo from the form. | |
security | array | yes | Some security configuration flags. If you change any value in this array, refresh the configuration of the IdP with updated meta data. Check OneLogin SAML settings for more information. | |
sp | array | yes | The configuration of iTop as a Service Provider. Check OneLogin SAML settings for more information. | |
strict | bool | yes | If 'strict' is True, then the PHP Toolkit will reject unsigned or unencrypted messages if it expects them to be signed or encrypted. Also it will reject the messages if the SAML standard is not strictly followed: Destination, NameId, Conditions … are validated too. | true |
retrieveParametersFromServer | bool | no | Try to change this value if an error di displayed when processing the Logout Response… See this page for more information. | |
validUntil | number | no | The attribute “validUntil” in the XML meta data of the SP. As a number of days relative to the time at which the meta data are generated. | 2 |
Commented version of the configuration:
'combodo-saml' => array ( // If 'strict' is True, then the PHP Toolkit will reject unsigned // or unencrypted messages if it expects them to be signed or encrypted. // Also it will reject the messages if the SAML standard is not strictly // followed: Destination, NameId, Conditions ... are validated too. 'strict' => true, // Enable debug mode (to print errors). 'debug' => false, // Service Provider Data that we are deploying. // Identity Provider Data that we want connected with our SP. 'idp' => array ( // Identifier of the IdP entity (must be a URI) 'entityId' => '', // SSO endpoint info of the IdP. (Authentication Request protocol) 'singleSignOnService' => array ( // URL Target of the IdP where the Authentication Request Message // will be sent. 'url' => '', // SAML protocol binding to be used when returning the <Response> // message. OneLogin Toolkit supports the HTTP-Redirect binding // only for this endpoint. 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', ), // SLO endpoint info of the IdP. 'singleLogoutService' => array ( // URL Location of the IdP where SLO Request will be sent. 'url' => '', // URL location of the IdP where the SP will send the SLO Response (ResponseLocation) // if not set, url for the SLO Request will be used 'responseUrl' => '', // SAML protocol binding to be used when returning the <Response> // message. OneLogin Toolkit supports the HTTP-Redirect binding // only for this endpoint. 'binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', ), // Public x509 certificate of the IdP 'x509cert' => '', /* * Instead of use the whole x509cert you can use a fingerprint in order to * validate a SAMLResponse, but we don't recommend to use that * method on production since is exploitable by a collision attack. * (openssl x509 -noout -fingerprint -in "idp.crt" to generate it, * or add for example the -sha256 , -sha384 or -sha512 parameter) * * If a fingerprint is provided, then the certFingerprintAlgorithm is required in order to * let the toolkit know which algorithm was used. Possible values: sha1, sha256, sha384 or sha512 * 'sha1' is the default value. * * Notice that if you want to validate any SAML Message sent by the HTTP-Redirect binding, you * will need to provide the whole x509cert. */ // 'certFingerprint' => '', // 'certFingerprintAlgorithm' => 'sha1', /* In some scenarios the IdP uses different certificates for * signing/encryption, or is under key rollover phase and * more than one certificate is published on IdP metadata. * In order to handle that the toolkit offers that parameter. * (when used, 'x509cert' and 'certFingerprint' values are * ignored). */ // 'x509certMulti' => array( // 'signing' => array( // 0 => '<cert1-string>', // ), // 'encryption' => array( // 0 => '<cert2-string>', // ) // ), ), ),
SAML users are created by selecting the External user type when prompted for a “New user Account”:
Those users can be provision using data import or data synchronization
Q: How to configure SAML with Windows authentication?
A: To configure iTop single sign on with SAML and Windows authentication you have to execute the following configuration:
'combodo-saml' => array ( ... 'security' => array ( 'wantMessagesSigned' => false, 'wantAssertionsSigned' => true, 'authnRequestsSigned' => true, 'logoutRequestsSigned' => true, 'logoutResponseSigned' => false, 'requestedAuthnContext' => array ( 0 => 'urn:federation:authentication:windows', ), ), ),
To understand the error codes, ahve a look at the reference documentation of the SAML protocol. Here is a version in the Microsoft Documentation
OneLogin provide a series of helpful SAML online tools here.