MRBS Users Authentication ========================= Principles ========== User interface -------------- MRBS pages can be accessed and used, depending on the user's access level. There are three levels of access in MRBS: - Level 0 - Unknown user - Level 1 - Authenticated user - Level 2 - Administrator Level 0 users can view most pages, but cannot make any change. Level 1 users can make bookings, and can change their own bookings. Level 2 users - The administrators - are allowed to modify other people's bookings. Administrators also have the ability to add and remove rooms and areas. Before accessing a restricted page, MRBS prompts the user for a name and password. Then it connects to an authentication server, which is responsible for deciding if the user/password pair is valid. If it is, MRBS then checks if the name is in its list of administrators. Finally MRBS grants access to the page at the right level. The name and password are recorded for the duration of the session, and won't be asked for again. Configuration ------------- MRBS authentication configuration is done in file config.inc.php. This file contains a section for authentication parameters, where several choices must be made: - The session management scheme. (How to prompt for a user/password, and how keep track of it) - The authentication method. (What kind of server will verify the user/password validity) - The list of administrators (not used by the 'db' authentication method) There are several alternative authentication methods. They differ by the type of authentication server they can connect to, and by the kind of program used for communicating with that server. Each method is implemented in a pluggable module. There are two general categories: - Internal PHP modules, which connect directly to an authentication server. These modules may require additional parameter settings in config.inc.php. - External programs, that do the same after being invoked by the special "ext" PHP authentication module. Internal PHP modules support the following kinds of authentication servers: LDAP servers; POP3 email servers; IMAP email servers; NW servers. In addition, three special internal modules support a local list of users for one; a local list of users stored in the database for the second; and authenticating anybody for the other. External programs support: NT Domain controllers; Netware servers; PAM servers. Which authentication scheme to choose ===================================== The default authentication scheme is 'db', which stores users' details in the MRBS database in the 'users' table. However, the right choice for you will depend on whether your users are already listed somehere else. If they're all in a closed organization (eg a private company or a university), then this organization probably already has its own authentication service. MRBS can connect to several kinds of services, such as LDAP servers, NT domain controllers, Netware servers and POP3 or IMAP mail servers. If your website is using a Joomla! or WordPress CMS and you already require your users to authenticate, then MRBS can be configured to authenticate your users against the existing list of users in the CMS. PHP authentication modules -------------------------- +---------+------------------------+-------------------+------------------------+ |Type |Description |Pros |Cons | +---------+------------------------+-------------------+------------------------+ |none |Every user is accepted. | | | | |This was for example the| | | | |case of the MRBS 1.1 IP | - Very simple to | - No security at all. | | |address and computer | setup. | | | |name "authentications". | | | +---------+------------------------+-------------------+------------------------+ |config |Users are listed in | | | | |config.inc.php. | | | | | | - Simple to | - Users cannot update | | | | setup. | their own password. | | | | | | | | | - Not dependent | - Administrators | | | | on an external | manually set the user | | | | authentication | passwords, which is | | | | server, so usable| against normal | | | | on the Internet. | confidentiality rules.| | | | | | +---------+------------------------+-------------------+------------------------+ |db |Users validated using | | | |(default)|web-based authentication| - Simple to setup| | | |based on a table in mrbs| | - Does not use | | |database | - Built in MRBS | existing directory | | | | but more secure | | | | | than 'config' | | | | | | | | | | - Easy to | | | | | configure | | +---------+------------------------+-------------------+------------------------+ |db_ext |Users validated using | | | | |a table in an external | - Uses an | | | |database | existing | | | | | authentication | | | | | database thereby | | | | | saving directory | | | | | duplication. | | | | | | | | | | - easy to | | | | | configure | | | | | | | +---------+------------------------+-------------------+------------------------+ |ldap |Users validated using | | | | |LDAP directory services.| | | | | | - For corporate | - Does not work on the| | | | intranets using | Internet? | | | | LDAP directory | | | | | services. | | | | | | | +---------+------------------------+-------------------+------------------------+ |pop3 |Users validated by a | | | | |POP3 mail server. | | | | | | - For groups of | - Technically works on| | | | users all having | the Internet, but it's| | | | an Email address | unlikely all users of | | | | on the same | a site will have an | | | | server. | Email address on the | | | | | same mail server. | | | | | | +---------+------------------------+-------------------+------------------------+ |imap |Users validated by an | | | | |IMAP mail server. | | | | | | - For groups of | - Technically works on| | | | users all having | the Internet, but it's| | | | an Email address | unlikely all users of | | | | on the same | a site will have an | | | | server. | Email address on the | | | | | same mail server. | | | | | | +---------+------------------------+-------------------+------------------------+ |imap_php |A more up to date | | | | |version of imap | | | +---------+------------------------+-------------------+------------------------+ |nw |Users validated by | | - This is only going | | |Netware server | | to work on Linux. | | |(user contrib.) | - ? | | | | | | | +---------+------------------------+-------------------+------------------------+ |ext |Validation is delegated | | | | |to an external program. | | | | | | - Lots of | - Most available | | | | possibilities. | programs work only | | | | | under Unix. | | | | | | +---------+------------------------+-------------------+------------------------+ |joomla |Users are validated | | | | |against a Joomla! | | | | |installation running on | | | | |the same server | | | | | | | | +---------+------------------------+-------------------+------------------------+ |wix |Users are validated | - Users don't | - Not a single signon/| | |against members | need to have | signoff solution | | |registered on a Wix | two sets of | - Can be slight delays| | |website. | login details | in retrieving user | | | | - Administrators | details from a | | | | only have to | remote Wix site | | | | manage users in| | | | | one place (Wix)| | | | | | | +---------+------------------------+-------------------+------------------------+ |wordpress|Users are validated | | | | |against a WordPress | | | | |installation running on | | | | |the same server | | | | | | | | +---------+------------------------+-------------------+------------------------+ |cas |Users are validated | - Federated login| - Requires a CAS | | |against a CAS server | - Single signon | server | | | | - Single signoff | | +---------+------------------------+-------------------+------------------------+ |saml |Users are validated | - Federated login| - Must set up | | |against a SimpleSamlPhp | - Single signon | SimpleSamlPhp | | |installation running on | - Single signoff | - SAML knowledge | | |the same server | - Hooks into | recommended | | | | SAML infra | | +---------+------------------------+-------------------+------------------------+ |idcheck |For use with mod_idcheck| | | | |idcheck.sourceforge.net | | | | |Must be used together | | | | |with the 'remote_user' | | | | |session scheme. | | | +---------+------------------------+-------------------+------------------------+ External authentication programs -------------------------------- +------------------+------------------+-----------------+-------------------+ |Program |Description |Pros |Cons | +------------------+------------------+-----------------+-------------------+ |crypt_passwd.pl |Perl script which | - Easy to setup | - Relies upon a | | |reads a 'shadow' | | special users | | |style file with | | file. | | |usernames and | | | | |crypted passwords.| | | +------------------+------------------+-----------------+-------------------+ |auth_pam.pl |Uses PAM | | | | | | | | | | | - For Unix | | | | | system uses PAM| | | | | (especially | | | | | Linux, but also| | | | | SUN Solaris) | | | | | | | +------------------+------------------+-----------------+-------------------+ Which session scheme to choose ============================== The session scheme is the way the user and password is queried and recorded. The default session scheme is 'php'. Some authentication schemes, eg 'joomla', 'wordpress', 'cas' and 'saml' require you to use their own session schemes. The others are left in for historical reasons: +---------+------------------------------+--------------------+----------------+ |Type |Description |Pros |Cons | +---------+------------------------------+--------------------+----------------+ |php |Use PHP's native session | | | |(default)|handling. Recommended. | | | | |Session data is saved in the | - Recommended by | - Any? | | |MRBS database. | PHP doctors, PHP | | | | | moms, etc. | | | | | | | +---------+------------------------------+--------------------+----------------+ |http |Use the "HTTP basic | | | | |authentication" protocol to | | | | |get a user/password popup. | - Simple. | - Incompatible| | | | | with IIS web | | | | - This was the | servers. | | | | default in MRBS | | | | | 1.1 for most | - No way to | | | | authentication | log out. | | | | schemes. | | | | | | | +---------+------------------------------+--------------------+----------------+ |cookie |Save the user/password in | | | | |cookies on the client's web | | | | |browser. | - Less demanding | - Some users | | | | for the server | disable | | | | than PHP native | cookies on | | | | sessions. (No | their browser.| | | | files stored) | | | | | | | +---------+------------------------------+--------------------+----------------+ |nt |The users identity is queried | | | | |AND validated by an NT/IIS | | | | |server running in | - For corporate | - Incompatible| | |authenticated access mode. | intranets using | with Linux | | |(That is anonymous access | NT/2000/XP servers| servers by | | |disabled, or Access Control | in authenticated | definition. | | |Lists enabled) | access mode. | | | | | | - Does not | | |Use in combination with | | work on the | | |authentication "none", as the | | Internet. | | |authentication is already done| | | | |by IIS during the session | | - Does not | | |initiation. | | allow | | | | | anonymous | | | | | browsing. | | | | | | +---------+------------------------------+--------------------+----------------+ |omni |The users identity is queried | | | | |AND validated by an Omnicron | | | | |OmniHTTPd web server. | - For users of | - For users of| | | | Omnicron OmniHTTPd| Omnicron | | |Use in combination with | web servers. | OmniHTTPd web | | |authentication "none", as | | servers. | | |authentication is already done| | | | |by OmniHTTPd during the | | | | |session initiation. | | | +---------+------------------------------+--------------------+----------------+ |remote_ |The user's identity is | | | |user |determined by reading the | | | | |REMOTE_USER environment | - For users that | - Requires a | | |variable. | already have an | web server | | |Use in combination with | wider auth. | setup that | | |authentication "none", as | scheme that sets | sets | | |authentication has already | REMOTE_USER, allows| REMOTE_USER. | | |been done by the system that | MRBS to use that | Could be hard | | |sets REMOTE_USER | scheme | to set up | +---------+------------------------------+--------------------+----------------+ |ip |Users are identified by the IP| | | | |address of their computer. | | | | | | - Easy to setup, | - Incompatible| | |Use in combination with | for MRBS | with DHCP. | | |authentication "none" or | evaluation. | | | |"config". | | - Users cannot| | | | | make changes | | | | | from a | | | | | different | | | | | computer. | | | | | | +---------+------------------------------+--------------------+----------------+ |host |Users are identified by the | | | | |DNS name of their host | | | | |computer. | - Easy to setup, | - Users cannot| | | | for MRBS | make changes | | |Use in combination of | evaluation. | from a | | |authentication "none" or | | different | | |"config". | | computer. | | | | | | +---------+------------------------------+--------------------+----------------+ |joomla |Use when using Joomla! | | | | |authentication. | | | | | | | | +---------+------------------------------+--------------------+----------------+ |wordpress|Use when using WordPress | | | | |authentication. | | | | | | | | +---------+------------------------------+--------------------+----------------+ |cas |Use when using CAS | - Federated login | - Requires a | | |authentication. | - Single signon | CAS server | | | | - Single signoff | | +---------+------------------------------+--------------------+----------------+ |saml |Use when using SAML | - Federated login | - Must set up | | |authentication. | - Single signon | SimpleSamlPhp| | | | - Single signoff | - SAML | | | | - Hooks into | knowledge | | | | SAML infra | recommended | +---------+------------------------------+--------------------+----------------+ How to configure authentication =============================== Users ----- You don't configure users in MRBS. Users (and their password) are configured in an external authentication server. Exceptions: - The "config" authentication is managed by MRBS, using a list of names and passwords in config.inc.php. This is done by specifying: $auth["user"][ "username1"] = "password1"; $auth["user"]["username2"] = "password2"; etc - The "db" authentication is managed by MRBS, using a list of names and passwords stored in the MRBS database. Administrators -------------- Prerequisite: Administrators are also users. They must have a valid user name and password in the selected authentication server. Administrators are defined in config.inc.php. This is done by specifying: $auth["admin"][] = "username1"; $auth["admin"][] = "username2"; etc You can have as many administrators as you want in this list. Exceptions: - In the "db" authentication method, access rights are stored in the MRBS database and are managed by MRBS. The default MRBS configuration uses PHP sessions, and a user list in config.inc.php for authentication. It defines three demo users 'alice' 'bob' and 'administrator'. The 'administrator' user is also in the administrators list by default. You will almost surely want to change these. If IP authentication is used, for "username" use the IP address. In this case, make sure to define the local host (127.0.0.1) as an administrator. This allows to conveniently administer the reservation system locally on the server. Session type ------------ Choose one type in the list above, and set the $auth["session"] parameter in config.inc.php. Example: $auth["session"] = "php"; Authentication type ------------------- Choose the internal authentication module you want. Internal PHP modules -------------------- If it's an internal PHP module, set the $auth["type"] parameter in confing.inc.php. Example: $auth["type"] = "pop3"; Then set the type-specific parameters in config.inc.php. See details in the authentication descriptions below. External programs ----------------- If you want to use an external authentication program, set $auth["type"] = "ext"; and set the additional parameters: - The name of the selected program in $auth["prog"]. Don't forget to prefix it with "./" under Unix and ensure that the program is executable by the "user" that the webserver runs as. Example: $auth["prog"] = "./cryt_passwd.pl"; - The arguments to pass to the above program in $auth["params"]. $auth["params"] = "passwd_file #USERNAME# #PASSWORD#"; At runtime "#USERNAME#" and "#PASSWORD#" will get replaced with the username and password that the user entered to login. The string can contain other arguments in addition to the above two. Internal PHP Authentication Modules Configuration ================================================= Config Authentication --------------------- Config Authentication uses no external server. It uses a list of users config.inc.php. Configure it as follows: $auth["type"] = "config"; Then add the list of users: $auth["user"]["username1"] = "password1"; $auth["user"]["username2"] = "password2"; etc Note: If the password contains the characters \ or $, then it's necessary to prefix them with a \. For example for password pa$$word, use the string = "pa\$\$word". Finally put at least one of the users in the administrator's list. $auth["admin"][] = "username2"; etc DB Authentication ------------------- Authentication method, usable on the Internet. It works by storing the list of users in a new table called mrbs_users in the mrbs database. The authentication is done by the class \MRBS\Auth\AuthDb. Enable it by setting $auth["type"]="db" in config.inc.php. The list of users is displayed by clicking on the "Users" menu item in the top banner. This list is managed by module edit_users.php. Administrators have the right to edit every entry, and add or remove users. Ordinary users only have the right to edit their own entry. When you first run MRBS it will prompt you to set up a user with administrator rights. Until you do this the system is open and the first person to use MRBS will be able to set up an administrator and lock you out of the system. You will then only be able to get back into the system by emptying the users table. Once you have set up the first administrator you can then log on to the system using the username and password you have just created and create more users. Upgrading from pre-1.4.2 systems: Versions of MRBS before 1.4.2 did not store access rights in the database and relied on the list of admins in the config file. If you are upgrading from a pre-1.4.2 system, MRBS will automatically upgrade the users table in the database by adding a field for access rights level and give admin rights to those users for whom admin access is defined in the config file. So, if upgrading, you will need to make sure that your admins are set in the config file until you have run edit_users.php (by following the "User list" link) for the first time. Once you have run edit_users.php the admin definitions in the config file are no longer used and can be deleted if you wish. It's possible, and very simple, to add new application-specific fields in the mrbs_users table. No change is needed to the MRBS code. It will automatically detect the new fields and add columns for them. You can turn the field names into meaningful labels by using the $vocab_override config setting, eg $vocab_override['en']['address'] = 'Postal address'; Future improvements - Have a second level of administrators (level 3 users), with only such level 3 users allowed to edit the user database. This would be similar to all other authentications in mrbs, which delegate the user accounts management to an external authority. External DB (db_ext) Authentication ----------------------------------- Authentication method, usable on the Internet. It works by using one of the installer's own databases. The database can be any database system for which MRBS has a database abstraction. You can configure how to connect to the database server, what kind of database system it is (mysql, mysqli, pgsql currently), the database/table to use and the names of the "user" and "password" columns. The configuration items are held in config.inc.php and are as follows: $auth['db_ext']['db_system'] = 'mysql'; /* Or 'mysqli', 'pgsql' */ $auth['db_ext']['db_host'] = 'localhost'; The server to connect to. $auth['db_ext']['db_username'] = 'authuser'; $auth['db_ext']['db_password'] = 'authpass'; The MySQL username and password to connect with. $auth['db_ext']['db_name'] = 'authdb'; The name of the database. $auth['db_ext']['db_table'] = 'users'; The table that holds the authentication data. $auth['db_ext']['column_name_username'] = 'name'; $auth['db_ext']['column_name_password'] = 'password'; The names of the two columns that hold the authentication data. $auth['db_ext']['password_format'] = 'md5'; This is the format of the password entries in the table. You can specify 'md5', 'sha1', 'sha256', 'crypt' or 'plaintext'. $auth['db_ext']['column_name_level'] = 'level'; This configuration item is optional and contains the name of the column that hold the access level of the user. POP3 Authentication ------------------- MRBS has POP3 Authentication support. This method will first try to authenticate using APOP, and fall back to standard USER/PASS if that fails. This can be used by setting config.inc.php as follows: $auth["type"] = "pop3"; Also you will need to change the section: # 'auth_pop3' configuration settings # Where is the POP3 server $pop3_host = "pop3-server-name"; # The POP3 server port $pop3_port = "110"; You will almost certainly not need to change the POP3 port number. This method supports authentication against multiple servers using the syntax below: Multiple servers all using the same port: # 'auth_pop3' configuration settings # Where is the POP3 server $pop3_host[] = "localhost"; $pop3_host[] = "myisp.co.uk"; # The POP3 server port $pop3_port = "110"; Multiple servers with the option of different ports for each server: # 'auth_pop3' configuration settings # Where is the POP3 server $pop3_host[] = "localhost"; $pop3_host[] = "myisp.co.uk"; # The POP3 server ports in the same order as the hosts $pop3_port[] = "110"; $pop3_port[] = "110"; Note: if you use the latter configuration then an equal number of hosts and ports must be specified or authentication will fail. IMAP Authentication -------------------- Very similar in principle to the pop3 authentication. MRBS has IMAP Authentication support. This can be used by setting config.inc.php as follows: $auth["type"] = "imap"; Also you will need to change the section: # 'auth_imap' configuration settings # Where is the IMAP server $imap_host = "imap-server-name"; # The IMAP server port $imap_port = "143"; You will almost certainly not need to change the IMAP port number. This method supports authentication against multiple servers using the syntax below. It will try all the servers until a match is found or it fails to authenticate the user. Multiple servers all using the same port: # 'auth_imap' configuration settings # Where is the IMAP server $imap_host[] = "localhost"; $imap_host[] = "myisp.co.uk"; # The IMAP server port $imap_port = "143"; Multiple servers with the option of different ports for each server: # 'auth_imap' configuration settings # Where is the IMAP server $imap_host[] = "localhost"; $imap_host[] = "myisp.co.uk"; # The IMAP server ports in the same order as the hosts $imap_port[] = "143"; $imap_port[] = "143"; Note: if you use the latter configuration then an equal number of hosts and ports must be specified or authentication will fail. LDAP Authentication ------------------- This method uses PHP's LDAP extension which must be compiled into PHP or installed and loaded as a plugin extension in your php.ini. This method can be used by setting config.inc.php as follows: $auth["type"] = "ldap"; Also you will need to change the section: # 'auth_ldap' configuration settings # Where is the LDAP server $ldap_host = "localhost"; # If you have a non-standard LDAP port, you can define it here #$ldap_port = 389; # If you want to use LDAP v3, change the following to true $ldap_v3 = false; # If you want to use TLS, change following to true $ldap_tls = false; # LDAP base distinguish name # See AUTHENTICATION for details of how check against multiple base dn's $ldap_base_dn = "ou=organizationalunit,dc=my-domain,dc=com"; # Attribute within the base dn that contains the username $ldap_user_attrib = "uid"; You only need to set $ldap_port if your LDAP server uses a non-standard port. If you want to use LDAP v3, or TLS over LDAP set $ldap_v3 or $ldap_tls to true, respectively. This method will attempt an authenticated bind to the ldap server using the supplied password and a distinguished name, which is formed from the base distinguished name, the user attribute and the user name. This method supports multiple values for most of the configuration parameters, including $ldap_base_dn entries and $ldap_user_attrib values. The authentication is attempted with each set of configuration parameters in turn until it succeeds or it fails to authenticate the user. Multiple base distinguished names with the same user attribute for each base dn: # 'auth_ldap' configuration settings # Where is the LDAP server $ldap_host = "localhost"; # LDAP base distinguish names $ldap_base_dn[] = "ou=People, o=myCompany, c=US"; $ldap_base_dn[] = "ou=Administrators, o=myCompany, c=US"; # $ldap_user_attrib = "uid"; Multiple base distinguished names with the option of different user attributes for each base dn: # 'auth_ldap' configuration settings # Where is the LDAP server $ldap_host = "localhost"; # LDAP base distinguish names $ldap_base_dn[] = "ou=People, o=myCompany, c=US"; $ldap_base_dn[] = "ou=Administrators, o=myCompany, c=US"; # $ldap_user_attrib[] = "uid"; $ldap_user_attrib[] = "cn"; Note: if you use the latter configuration then an equal number of base dn's and user attributes must be specified or authentication will fail. NT Authentication ----------------- MRBS has Microsoft Windows NT/IIS authentication support. This can be used by setting config.inc.php as follows: $auth["session"] = "nt"; $auth["type"] = "none"; Note that technically NT authentication is actually an MRBS session scheme. We put it in this list as it is related with authentication anyway. To add an admin, just add his user's Windows user account like this: $auth["admin"][] = "nt_username"; Also this scheme is fairly simple (it relies on IIS determining a user's Windows user account identity, before allowing the user to establish a network connection with the server) there are some requirements for it to work (these notes are based on IIS 5.0): - You have to configure you mrbs directory (at least) to use either 'Basic Authentication' or 'Integrated Windows Authentication' (formerly called NTLM or Windows NT Challenge/Response authentication). To enable a WWW authentication method in IIS: In the Internet Information Services snap-in, select your site, but preferably only mrbs directory, and open its property sheets. Select the Directory Security property sheet. Under Anonymous Access and Authentication Control, click Edit. In the Authentication Methods dialog box, select one or more appropriate methods. The simplest way is to use 'Integrated Windows Authentication' because unlike 'Basic authentication', it does not prompt users for a user name and password. The current Windows user information on the client computer is used for the 'integrated Windows authentication'. It is also a more secure form of authentication because the user name and password are not sent across the network. But if you really want your users to enter their domain username/password, you have to select 'Basic Authentication'. The advantage of Basic authentication is that it is part of the HTTP specification, and is supported by most browsers. So, theoretically, you can log in with a valid domain username/password with a non-Microsoft browser, but frankly I did not tested it. The disadvantage is that 'Basic authentication' transmit passwords in an unencrypted form. - To use 'Integrated Windows Authentication', you HAVE TO use the Microsoft browser too. Currently, only Internet Explorer, version 2.0 and later, supports this. - The 'Anonymous access' must be disabled. - If you enable both Basic and Integrated authentication, Integrated authentication takes precedence over Basic authentication. - 'Integrated Windows authentication' does not work over HTTP Proxy connections or other firewall applications. So this scheme is more suitable for an Intranet, but 'Basic Authentication' should work (not tested). All this was tested against IIS 5.0 on Windows 2000 server and Windows 2000 workstations using Internet Explorer 6.0, but this should work from IIS 4.0. OMNI Authentication -------------------- OMNI Authentication using Omnicron OmniHTTPd web server security features. Very similar in principle to NT authentication. $auth["session"] = "omni"; $auth["type"] = "none"; Note that technically Omni authentication is actually an MRBS session scheme. We put it in this list as it is related with authentication anyway. REMOTE_USER Authentication -------------------------- Get user identity/password using the REMOTE_USER environment variable To use this session scheme, set in config.inc.php: $auth['session'] = 'remote_user'; $auth['type'] = 'none'; If you want to display a logout link, set in config.inc.php: $auth['remote_user']['logout_link'] = '/logout/link.html' Joomla! Authentication ---------------------- Set in config.inc.php $auth['joomla']['rel_path'] = '..'; // Path to the Joomla! installation relative to MRBS. // [Note that although in Joomla! access levels are solely used for what users are allowed to *see*, we use // them in MRBS to determine what they can see and do, ie we map them onto MRBS user levels. While this // does not strictly follow the Joomla! access control model, it does make it much simpler to give users // MRBS permissions.] // List of Joomla! viewing access level ids that have MRBS Admin capabilities. You can if you wish use // the existing viewing access levels. However we recommend creating a new access level, eg // "MRBS Administrator" and assigning that to user groups, as it will then be clearer which groups // have what kind of access to MRBS. $auth['joomla']['admin_access_levels'] = array(); // Can either be a single integer, or an array of integers. // As above, but for ordinary user rights. Create for example a viewing access level called "MRBS User" // and assign that level to user groups as appropriate. $auth['joomla']['user_access_levels'] = array(); // Can either be a single integer, or an array of integers. WordPress Authentication ------------------------ Set in config.inc.php $auth['session'] = 'wordpress'; $auth['type'] = 'wordpress'; $auth['wordpress']['rel_path'] = '..'; // Path to the WordPress installation relative to MRBS. // List of WordPress roles that have MRBS Admin capabilities. The default is 'administrator'. // Note that these role names are the keys used to store the name, which are typically in lower case // English, eg 'administrator', and not the values which are displayed on the dashboard form, which will // generally start with a capital and be translated, eg 'Administrator' or 'Administrateur' (French), // depending on the site language you have chosen for WordPress. // You can define more than one WordPress role that maps to the MRBS Admin role by using // an array. The comment below assumes that you have created a new WordPress role (probably by using // a WordPress plugin) called "MRBS Admin", which will typically (depending on the plugin) have a key of // 'mrbs_admin', and that you assigned that role to those users that you want to be MRBS admins. $auth['wordpress']['admin_roles'] = 'administrator'; // can also be an array, eg = array('administrator', 'mrbs_admin'); // List of WordPress roles that have MRBS User capabilities. This allows you to have some WordPress users // who are authorised to use MRBS and some who are not. $auth['wordpress']['user_roles'] = array('subscriber', 'contributor', 'author', 'editor', 'administrator'); Then in your WordPress wp-config.php file set: // Define cookie paths so that login cookies can be shared with MRBS $domain_name = 'example.com'; // Set to your domain name define('COOKIEPATH', '/'); define('SITECOOKIEPATH', '/'); // In the definition below the '.' is necessary for older browsers (see // http://php.net/manual/en/function.setcookie.php). define('COOKIE_DOMAIN', ".$domain_name"); define('COOKIEHASH', md5($domain_name)); SAML Authentication ------------------- Set in config.inc.php $auth['type'] = 'saml'; $auth['session'] = 'saml'; $auth['saml']['ssp_path'] = '/opt/simplesamlphp'; $auth['saml']['authsource'] = 'default-sp'; $auth['saml']['attr']['username'] = 'sAMAccountName'; $auth['saml']['attr']['mail'] = 'mail'; $auth['saml']['admin']['memberOf'] = ['CN=Domain Admins,CN=Users,DC=example,DC=com']; // Optional access control filter $auth['saml']['user']['memberOf'] = ['CN=Calendar Users,CN=Users,DC=example,DC=com']; This scheme assumes that you've already configured SimpleSamlPhp, that you have configured oid2name mapping, and that you have set up aliases in your webserver so that SimpleSamlPhp can handle incoming assertions. Refer to the SimpleSamlPhp documentation for more information on how to do that. https://simplesamlphp.org/docs/stable/simplesamlphp-install https://simplesamlphp.org/docs/stable/simplesamlphp-sp Wix Authentication ------------------- See wix/README External Authentication Programs Configuration ============================================== Encrypted password authentication ------------------------------- crypt_passwd.pl is a short Perl script, which can be used to demonstrate how the "ext" authentication provider works. It utilises uses a file containing usernames and their encrypted passwords. config.inc.php should be changed to have a section that reads something like: $auth["type"] = "ext"; $auth["prog"] = "../crypt_passwd.pl"; $auth["params"] = "/etc/httpd/mrbs_passwd #USERNAME# #PASSWORD#"; As you can see the crypt_passwd.pl script takes 3 parameters. The first parameter is the filename of the password file. It must be readable by the user which PHP is running as, which is usually the user the web server is running as. The password file must consist of pairs of username and encrypted password, separated by a colon. See crypt_passwd.example for an example password file. NOTE: Under Unix, make sure crypt_passwd.pl has execution rights: 'chmod +x crypt_passwd.pl' PAM Authentication -------------------- In case your Unix system uses PAM (especially Linux, but also SUN Solaris) you might try the script auth_pam.pl. This script takes two two parameters - the user name and the user password. This perl script requires Authen::PAM. The script has to be run as SUID. Therefore you should take some precautions to not undermine your system's security. Change the group of the script to that of your Web Server (for Apache this is normally nobody or apache) and don't make it readable and executable to anybody else, eg.: chgrp nobody auth_pam.pl The script has to be run SUID and has to be executed by sperl: chmod 4750 auth_pam.pl The first line (#!/usr/bin/sperl5.6.0) says where sperl is located on your system. Please adapt this for your needs. Now add the configuration to web/config.inc.php in your MRBS directory. This looks as follows (adapt the path to auth_pam.pl according to your your configuration): $auth["realm"] = "MY REALM"; $auth["type"] = "ext"; $auth["prog"] = "/var/www/html/mrbs/auth_pam.pl"; $auth["params"] = "#USERNAME# #PASSWORD#"; That's it. Note that this has been only tested with Red Hat 7.x. Feedback on whether this works on other systems ( eg. Solaris) is appreciated. Creating a new authentication scheme ==================================== Authentication classes are responsible for validating user/password pairs. They must not attempt to communicate with the user. Adding support for a new authentication service not yet supported by MRBS can be done using one of the two following techniques: Adding a PHP class ------------------ You must create a new filed called "web/lib/MRBS/Auth/AuthXxx.php". It will be configured by setting in config.inc.php: $auth["type"] = "xxx"; Underscores in the config variable need a CamelCase name. For example $auth["type"] = "xxx_yyy"; requires a file called AuthXxxYyy.php The class should extend \MRBS\Auth\Auth Using an external program ------------------------- External authentication programs are invoked via the internal PHP configuration proxy class called "AuthExt". The external program must take the username, password, and possibly other values as parameters. Its exit code must be a zero for "OK", and anything else for "not OK". AuthExt takes the following parameters in config.inc.php: $auth["type"] = "ext"; $auth["prog"] = "the_pathname_of_your_program"; $auth["params"] = "the arguments your program needs"; AuthExt constructs a command line to execute like: $cmd = $auth["prog"] . ' ' . $auth["params"]; $cmd = preg_replace('/#USERNAME#/',$user,$cmd); $cmd = preg_replace('/#PASSWORD#/',$pass,$cmd); This should allow a lot of flexibility with different authenticators. Creating a new session scheme ============================== Session classes manage the user interface for obtaining the user name and password. They also manage the way the name and password are recorded throughout a session. To create a new scheme, you must create a new PHP class called "web/lib/MRBS/Session/SessionXxx.php". It will be configured by setting in config.inc.php: $auth["session"] = "xxx"; Underscores in the config variable need a CamelCase name. For example $auth["session"] = "xxx_yyy"; requires a file called SessionXxxYyy.php The session class should extend either \MRBS\Session\SessionWithLogin or \MRBS\Session\SessionWithoutLogin. Note: Session schemes are also useful in the case where a web server enforces its own session and authentication management. See the SessionNt.php and session SessionOmni.php files as examples. In this case, use in combination with authentication "none", as the real authentication is already done during the session initiation, and needs not be done again inside MRBS. A little bit of history ======================= The original version of MRBS, created by Daniel Gardner, did not have username/password support. Each booking that was made had the IP address of the client machine logged as the "creator" of the booking. In this case the IP address functions as the "username". This works well in the case where all IPs are static, and everyone is allowed access to the system. In the wider world there are occasions where this is a little too liberal. To combat this MRBS 0.8 introduced authentication, initially provided by Sam Mason <smason@mtc.ricardo.com>. There are three levels of access in MRBS: - Level 0 - not logged in - Level 1 - Authenticated - Level 2 - Administrator The administrators are allowed to modify other people's bookings, whereas Level 1 users can only change their own. Administrators also have the ability to add and remove rooms and areas. With time, several alternative authentication methods were introduced. All rely on the same basic principles: - Each user is identified by a name. - Each name has a corresponding password. - The name/password pair must be valid in the authentication service MRBS connects to. - Some users have additional MRBS administration rights. Their names are listed in the $auth["admin"] list in config.inc.php. - It's the web site creator's responsibility to manually enter the names of all the users that will have administrator rights in this list. Before accessing a restricted page, MRBS prompts the user for a name and password. Then it connects to an authentication server, which is responsible for deciding if the user/password pair is valid. If it is, MRBS finally grants access to the page. The types of authentication servers supported are: LDAP servers; NT domain controllers; Netware servers; POP3 email servers; IMAP email servers; etc. Still the initial authentication system had shortcomings: - The user/password prompt relied on the HTTP basic authentication protocol, in a mode not supported by IIS web servers. - MRBS was increasingly used on the Internet, where central authentication servers are not available in the general case. - There was no way to log off. In MRBS 1.2, the authentication system was restructured by Jean-François Larvoire <jf.larvoire@sf.net> The main change was to separate the user/password acquisition (Also called session initiation), from its validation (called authentication). The existing routines for querying the user identity were moved to module session_http.inc (now SessionHttp.php). This module is left in for backwards compatibility, but deprecated. A new session management module was introduced, based on PHP's built-in session management. This is the one recommended now on. It includes the ability to log off. On the authentication side, most existing modules were carried on, with the session code removed. A simple module, auth_config.inc (now AuthConfig.php) was added, managing a simple list of users in config.inc.php. Eventually there will also be another authentication module, using a table of users in the MRBS database.