In my
previous article I presented how to create a web SSO system using SimpleSAMLphp and Symfony. The users where declared directly in simpleSAMLphp using
"exampleauth:UserPass".
In many companies a LDAP server is the source from where information about user authentication is taken. I will install OpenLDAP and configure my applications to use it.
1. Install OpenLDAP and phpLDAPadmin
For installing OpenLDAP and phpLDAPadmin I followed this tutorials from DigitalOcean:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-an-ubuntu-14-04-server
You will need to edit also the ldap.conf file, see
this thread on StackOverflow
Also you may get an error when trying to login with phpLDAPadmin
"Notice: Undefined variable: _SESSION in ..".
For me
this solution from StackOverflow solved the problem:
"Just add the user wich is running Apache2 (or php5-fpm!) to the
system group "www-data" (debian) and restart services apache AND if used
php5-fpm both.
Get the User apache is running as:
~# sed -rn 's/^User (.+)/\1/p' /etc/apache2/apache2.conf"
Using phpLDAPadmin I've created two groups "admin" and "regular_users" and also I've created some users allocated to these two groups.
2. Modify SimpleLDAPphp to use OpenLDAP
The documentation for using LDAP authentication is found here:
https://simplesamlphp.org/docs/stable/ldap:ldap
My settings are:
Select LDAP authentication to be used from /metadata/saml20-idp-hosted.php
/*
*Authentication source to use. Must be one that is configured in
* 'config/authsources.php'.
*/
'auth' => 'example-ldap',
3. Modify Symfony app
In the current Symfony application I am expecting an attribute
roles containing an array of roles. From LDAP I will receive different attributes, one of them is gidNumber, which is a number identifying a group. My current groups: admin and regular_users have gidNumber 500 and 501.
I will be using these gidNumbers to correctly create roles in the Symfony application.
The changes to be made are done in the UserCreator class:
Of course you need to change these mappings to fit your situation.
4. Test
First make sure to delete any sessions and cookies. After that try to access the secure route from consumer1.local, login with any user from LDAP and you should be redirected to secure area. Check in database if the user and user roles were created correctly.