SimplesamlphpBundle
This is a SimpleSAMLphp Bundle for Symfony., (*1)
Note: For Symfony 2.7 or lower, you need to use the 1.0.0 release of this bundle., (*2)
Note 2: This bundle uses the full SimpleSAMLphp application. I highly recommend to use this lighter and improved OneloginSamlBundle., (*3)
Installation
Add this bundle to your Symfony project., (*4)
composer require hslavich/simplesamlphp-bundle
or manually require this bundle in your composer.json
file., (*5)
"require": {
...
"hslavich/simplesamlphp-bundle": "dev-master"
}
Update your project., (*6)
composer update hslavich/simplesamlphp-bundle
Activate the bundle in app/AppKernel.php
., (*7)
$bundles = array(
...
new Hslavich\SimplesamlphpBundle\HslavichSimplesamlphpBundle(),
)
Configuration
Add bundle configuration settings to your Symfony config., (*8)
# app/config/config.yml
hslavich_simplesamlphp:
# Service provider name
sp: default-sp
You will need to create your own user provider. See the Symfony documentation "How to Create a custom User Provider"., (*9)
-
First, create a User class (you can also place it in your Entity/
folder), (*10)
# src/Acme/MyBundle/Security/User/MyUser.php
namespace Acme\MyBundle\Security\User;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\EquatableInterface;
class MyUser implements UserInterface, EquatableInterface
{
...
}
-
Then create the UserProvider class, (*11)
# src/Acme/MyBundle/Security/User/MyUserProvider.php
namespace Acme\MyBundle\Security\User;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
class MyUserProvider implements UserProviderInterface
{
public function loadUserByUsername($username) { ... }
public function refreshUser(UserInterface $user) { ... }
public function supportsClass($class) { ... }
}
-
And make your UserProvider
a service, (*12)
# src/Acme/MyBundle/Resources/config/services.yml
services:
my_user_provider:
class: Acme\MyBundle\Security\User\MyUserProvider
Then add the provider
and firewalls
settings to you Symfony security file., (*13)
# app/config/security.yml
security:
providers:
simplesaml:
id: my_user_provider
firewalls:
saml:
pattern: ^/
anonymous: true
stateless: true
simple_preauth:
authenticator: simplesamlphp.authenticator
provider: simplesaml
logout:
path: /logout
success_handler: simplesamlphp.logout_handler
Create the following file structure in your app/
folder and place your configuration files in there., (*14)
app/
config/
simplesamlphp/
cert/
saml.crt
saml.pem
config/
config.php
authsources.php
metadata/
saml20-idp-remote.php # Example
Make sure to correctly set the paths for cert/
and metadata/
folders in your config.php
file (absolute paths recommended). The metadata/saml20-idp-remote.php
is just an example. See the SimpleSAMLphp documentation, "Adding IdPs to the SP" for more information., (*15)
You may also place those folders anywhere else on your machine, just make sure to correctly set the SIMPLESAMLPHP_CONFIG_DIR
environment variable (see below)., (*16)
Add the environment variable to your webserver configuration file, e.g. /etc/apache2/httpd.conf.local
., (*17)
<Directory *>
...
SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/path/to/my/config
</Directory>
Enable session bridge storage (see Symfony documentation for more information)., (*18)
# app/config/config.yml
framework:
session:
storage_id: session.storage.php_bridge
handler_id: ~
Create an alias on your webserver, e.g. for an Apache2 webserver, add this line to you http.conf.local
(or other desired configuration file)., (*19)
Alias /simplesaml /home/myapp/vendor/simplesamlphp/simplesamlphp/www