Overslaan en naar de inhoud gaan

Single-Sign-On op een multi-domein site

Het opzetten van een SSO (Single Sign On) opstelling voor een multi-domein Drupal website is niet zo heel ingewikkeld. Sterker nog het is kinderlijk eenvoudig. Een Single Sign On houdt in dat je maar voor een van je sites hoeft in te loggen om op de andere sites ook actief te zijn met je account. Voorwaarde is uiteraard wel dat beide sites uit dezelfde codebase moeten komen.

Stel je hebt een website www.example.com. Daarnaast wil je een website crm.example.com. Deze setup kan je makkelijk maken binnen Drupal door in de site/ map een map crm.example.com te maken met daarin een settings.php bestand. Het eerste code voorbeeld hieronder laat de settings.php zien van de hoofdsite, de www.example.com. Deze heeft een database database1. In deze database staan een aantal gebruikers met rechten en rollen.

Het domein crm.example.com draait op een totaal andere database, namelijk database2. Het tweede code voorbeeld laat zien hoe de settings.php eruit ziet op het subdomein. Hierin zie je dat de tabellen: users, sessions, role, authmap en users_roles uit de eerste database, database1, gehaald wordt. De rest, zoals bijvoorbeeld de nodes, komt uit de database database2.

Nu volgt nog een kleine aanpassingen en dat is het cookie domein voor beide websites op .example.com zetten. Wanneer je nu inlogd op www.example.com en je surft naar crm.example.com ben je nog steeds ingelogd en zelfs met exact dezelfde gebruiker.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'database1',
      'username' => '[username]',
      'password' => '[password]',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'database2',
      'username' => '[username]',
      'password' => '[password]',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => array(
        'default'   => 'database2.',
        'users'     => 'database1.',
        'sessions'  => 'database1.',
        'role'      => 'database1.',
        'authmap'   => 'database1.',
        'users_roles'   => 'database1.',
      ),
    ),
  ),
);