Installation af Nemlog-in gennem WAYF

Denne guide beskriver hvordan man forbinder et ding.TING-site til WAYF (Where Are You From) Nemlog-in løsningen. Dokumentet antager, at man allerede har et ding.TING-site kørende,  før man installerer den udvidelse, som pt. ikke er en del af ding.TING.core.

Før denne løsning kan benyttes, skal man indgå en aftale med WAYF og SKAT omkring Nemlog-in. Du kan læse mere om indgåelse af aftaler omkring WAYF servicen på deres hjemmeside under “Hvordan bliver min institution tilsluttet?”.

Ding.ting WAYF løsningen består af disse komponenter:

  1. SimpleSAMLphp til at kommunikere med WAYF
  2. Ding WAYF modulet (ding_wayf),
  3. SSL certifikat til bibliotekets domæne.

1. SimpleSAMLphp

SimpleSAMLphp er en autentifikationsløsning skrevet i PHP, som kan kommunikere over SAML protokollen. Det er open source og kan hentes fra hjemmesiden http://simplesamlphp.org/.

Installation (Linux)

  1. Download simple SAML php fra http://simplesamlphp.googlecode.com/files/simplesamlphp-1.8.0.tar.gz.
  2. Pak den ud i /var/simplesamlphp.

Konfiguration

Første skridt er at lave et alias i webserver-konfigurationen til SimpleSAMLphp under https opsætning, så den kan tilgås sikret via en browser. Herunder er et eksempel på denne konfiguration til en Apache web-server.

Alias /simplesaml /var/simplesamlphp/www
<Directory /var/simplesaml/www/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

Test at du kan tilgå simple SAML på https://<domain>/simplesaml. Hvis det lykkes er næste skridt at konfigurere simple SAML til at kommunikere med WAYF serverne.

SSL Certifikater

SimpleSAMLphp benytter dit domænes SSL certifikat til at kommunikere sikret med WAYF serverne. Du skal altså have adgang til dit certifikat for at kunne konfigurere SimpleSAMLphp. Dit certifikat skal være uden kodeord, hvilket er meget almindeligt for certifikater brugt sammen med Apache.

Kommunikations opsætning

For at kommunikere med WAYF’s servere er der nogle få ting der skal konfigureres i SimpleSAMLphp. Først skal config.php i /var/simplesamlphp/config tilpasses (se template), hvor de interessante variabler er følgende:

  • auth.adminpassword: Denne kode skal bruges til at logge ind på selve SimpleSAMLphp’s administrations sider, hvor f.eks. metadata information findes. Man vil ikke kunne finde nogle ‘hemmelige’ informationer, så det behøver ikke være verdens længste kode.
  • secretsalt: Bruges til at skabe sikre hash værdier.
  • technicalcontact_email: Denne e-mail bliver brugt til at sende fejl-rappoter, hvis en bruger skulle løbe ind i problemer.
  • timezone: Den sættes til vores timezone 'Europe/Copenhagen'. Vi skal sætte denne da PHP nogle gang ikke kan finde den rigtige timezone.
  • language.default: sættes til dansk (da).

Næste skridt er at redigere authsources.php, som også ligger i var/simplesamlphp/config (se template). Følgende indstillinger ændres under ’default-sp’ array’et:

  • entityID: sættes til jeres domænenavn f.eks. https://www.aakb.dk.
  • idp: Der er 3 forskellige idp der skal bruges til forskellige situationer
  • certificate: Filnavnet på dit SSL certifikat, som ligger il /var/simplesamlphp/cert.
  • privatekey: Filnavnet på nøglen til dit certifikat.
  • description: Beskrivelse af din installation f.eks. “Aarhus Kommunes Biblioteker WAYF login service”.
  • name: Navnet på dit tilhørssted f.eks. “Aarhus Kommunes Biblioteker”.
  • OrganizationName: Dit organisationsnavn, altså den afdeling der varetager løsningen f.eks. ITK Aarhus Kommune.
  • OrganizationsURL: http adressen på din Ting hjemmside f.eks. https://www.aakb.dk.
  • url: Link til information omkring jeres nemlog-in løsning. Dette kunne være en statisk side i selve CMS’et. Dette link vil dog kunne blive vist, hvis det opstår en fejl i login processen og brugeren ender på simpleSAMLphp siderne.

De sidste informationer skal være udfyldt med både en dansk og engelsk udgave af informationerne, som et array.

‘name’ => array(
  ‘en’ => ‘text’,
  ‘da’ => ‘tekst’,
);

Få file ‘saml20-idp-remote.php’ fra WAYF og placér den i mappen /var/simplesamlphp/metadata/. Filen indeholder metadata informationer omkring WAYF’s forskellige services.

Kopiering af meta-data til WAYF server

Login til WAYF administrations server (https://janus.wayf.dk) gøres ved hjælp af mail tokens, hvilket betyder at du udfylder din egen e-mail adresse og derefter modtager du en mail med et login link.

Hvis I ikke har en konto i forvejen, vil den blive oprettet automatisk. For at få adgang til jeres Service Provider (SP) data skal man dog have en person fra WAYF til at forbinde sin konto (e-mail) med jeres information på deres server. Første gang man skal logge på, skal man oprette en SP. Man skal  bruge det entityID, som man har angivet i authsources.php f.eks. https://www.aakb.dk. Dernæst skal man importere metadata fra SimpleSAMLphp installationen over på WAYF serveren.

Du kan indlæse dine metadata på janus ved at angive følgende URL på “Importer metadata” siden: https://<domæne>/simplesaml/module.php/saml/sp/metadata.php/default-sp. Metadata skal indlæses på janus hver gang man laver ændringer i konfigurationen f.eks. når man får nyt SSL certifikat mm.

PHP session handling

Både Drupal og SimpleSAMLphp benytter PHP’s session handler til at styre brugerautentifikation, hvilket giver en konflikt. Der findes to løsninger til denne problemstilling, nemlig at benytte en SQLite database eller Memcache til at håndtere SimpleSAMLphp’s sessions. Memcache er et opensource cache system som benyttes i forbindelse med mange Ding installationer for at forbedre performance. Vi starter med at kigge på Memcahce og derefter på database løsningen.

Memcache

Der findes to forskellige implementeringer, nemlig memcache og memcached. Den første er en ældre implementering til PHP. SimpleSAMLphp er implementeret med den ældre udgave af memcache. Så benytter man memcached skal man indføre følgende ændringer:

Link til fil på server, da det er nemmer at download en diff.

diff --git a/lib/SimpleSAML/Memcache.php b/lib/SimpleSAML/Memcache.php
index e83835e..c41c7c8 100644
--- a/lib/SimpleSAML/Memcache.php
+++ b/lib/SimpleSAML/Memcache.php
@@ -132,7 +132,8 @@ class SimpleSAML_Memcache {

            /* Store this object to all groups of memcache servers. */
                                           foreach(self::getMemcacheServers() as $server) {
-                                                               $server->set($key, $savedInfoSerialized, 0, $expire);
+                                                              $server->set($key, $savedInfoSerialized, 0);
                                          }
                }
@@ -237,7 +238,8 @@ class SimpleSAML_Memcache {
                                          }

                                           /* Add this server to the Memcache object. */
-                                          $memcache->addServer($hostname, $port, TRUE, $weight, $timeout);
+                                         $memcache->addServer($hostname, $port, TRUE);
                     }
@@ -250,7 +252,7 @@ class SimpleSAML_Memcache {
         */
        private static function loadMemcacheServerGroup(array $group) {
                                           /* Create the Memcache object. */
-                                          $memcache = new Memcache();
+                                         $memcache = new Memcached();
                                           if($memcache == NULL) {
                                                               throw new Exception('Unable to create an instance of a Memcache object.' .
                                                                     ' Is the memcache extension installed?');

Næste skridt er at rediger config.php i /var/simplesamlphp/config for at sætte Memcache op til håndtering af sessions.

  • store.type:  sættes til memcache.
  • memcache_store.servers: sæt hostname til hvor memcache serveren findes. I de fleste tilfælde vil det være localhost.

Database (SQLite)

SimpleSAMLphp bruger SQLite til at håndter sessions, hvis man vælger ikke at benytte memcache. SQLite er en “simpel” database løsning, der ikke kræver en extra installationer for at køre. Databasen bestående af en enklet file på serveren placeret et sted, hvor PHP har lov til at skrive til filen. Du skal lave følgende ændringer i /var/simplesamlphp/config/config.php.

  • store.type:  sættes til sql.
  • store.sql.dsn: f.eks. 'sqlite:/tmp/session_database.sq3'.
  • store.sql.username: angive et brugernavn f.eks. ding_wayf.
  • store.sql.password: angive en automatisk generate adgangskode, du har ikke bruge for at kan huske denne kode.

2. Drupal (Ding)

Der er flere måder, hvor på man kan få ding WAYF koden installeret til en Ting hjemmeside. Den nemmeste er at tilføje det til build-profilen, men man kan også hente koden fra http://github.com/dingproject/ding_wayf.

Modulet installeres på sitet, som alle andre moduler via /admin/build/modules. Efter aktivering af modulet skal man tilgå siden /admin/settings/ding/wayf. De fleste vil kunne benytte default settings, så de kan bare trykke “Gem instillinger”.

Før du kan logge ind med WAYF skal du tilføje en afgangskode til bibliotekssystemet i “settings.php”. Grunden til dette er at WAYF returnerer et CPR nummer og ikke nogen kode for brugeren. Så derfor skal man bruge en special kode eller hash til alle brugere, der logger ind via WAYF. Hvis man benytter DDElibra, som bibliotekssystem, skal man finde trim værdien ”SScr alma-secret-pincode” og indsætte denne værdi. Du skal tilføje denne linje $conf[‘ding_wayf_passwd’] = ‘<kode/hash>’; til settings.php.

Modulet laver en block, men et link til WAYF login. Du kan selv bestemme, hvor dette link skal placeres på dit site ved at gå til "/admin/build/block" og f.eks. indsætte den i regionen "account"

3. Ordliste

  • SSL: Secure Sockets Layer (https)
  • idp: Identity Provider (WAYF)
  • sp: Service Provider (Ding)
  • qa: Quality assurance
  • WAYF: Where Are You From
  • SAML: Security Assertion Markup Language
  • SQLite: SQLite er et software bibliotek, som implementere en SQL database engine.

4. Referencer

Links til software der bliver brugt til denne løsning.

Grupper:

Kommentarer

Spørgsmål

I skriver at WAYF endnu ikke er en del af TING.core. Vil løsningen bliven en del af version 2.0? Går ikke ud fra at den er en del af 1.6.

WAYF

WAYF løsningen er tilgænglig til 1.6, den er dog ikke en del af std. build profilen. Koden ligge her http://github.com/dingproject/ding_wayf

WAYF bliver en del af ding 2.0

Vi er netop igang med at implementere WAYF modulet i Artesis Web så når koden frigives som open source vil det være tilgængeligt for alle ding bibliotekerne!

NemID i ding2

Bliver det også muligt at implementere NemID i ding2 hovedsporet? 

WAYF ding1 = ding2

WAYF modulet der findes til ding blev samtidig konverteret til ding2.

Det er endnu ikke formelt besluttet hvilke moduler der bliver en del af hovedsporet, men det vil i alle tilfælde være muligt at installere/aktivere WAYF/NemID!

WAYF ikke nemt at installere

Det er dog værd at bemærke at installation af WAYF i Ding2 bliver nogenlunde lige så kompliceret som denne guide redegør for ift. Ding1.

Understøttelse af WAYF og NemID kræver stadig at SimpleSamlPhp bliver installeret og konfigureret på serveren.

Status på wayf?

Jeg er igang med at blive registret ved wayf. Ville egengligt gerne have nem-login på vores side men har valgt at stoppe op.

Grunden til min forsigtighed er at andre biblioteker pt. ikke har installeret nem-login på deres sider. Undre mig fx. lidt over at Århus og Københavns Biblioteker endnu ikke har det på deres hjemmeside. Jeg ved godt at de ville vente til version 1.6 men stadigvæk?

Jeg har selv været igang med at undersøge med Reload hvordan jeg får det på vores Billund side.

Thomas Fini Hansen skriver bla. at SimpleSAMLphp skal installeres på serveren. DBC er vist ikke så vilde med den del. Men Reload siger at det er gjort før. Er der andre af jer der har fået det installeret på deres dbc server? Kunne det være en idé at vi henvendte os i flok og fik det gjort sammen. Det er jo noget alle biblioteker får brug for på sigt. Ellers virker nem-login ikke.

 

Mener ikke at DBC ikke er

Mener ikke at DBC ikke er vilde med det, tror bare gerne de vil have styr på hvad der bliver installeret. Det kunne også tænkes at de ville gøre det til en del af deres standard installation til Drupal sites, så fremtidige installationer er klar til WAYF.

php-saml i stedet for SimpleSAMLphp

php-saml fra firmaet OneLogin er netop kommet ud i en version 1.0.0. php-saml findes på GitHub.

Jeg tænker om det kunne give en nemmere opsætning samt bedre og mere integreret brugeroplevelse at bruge dette i stedet for SimpleSAMLphp, der jo installeres som en webapplikation parallelt med Ding?

Den er jeg med på. Der skal

Den er jeg med på. Der skal godtnok implementeres lidt mere logik på Ding siden, men det ville gøre tingene noget nemmere.

Som det er nu kompliceres processen af at selve installationen og opsætningen er en teknisk opgave der kræver en udvikler/drift medarbejder, men nogen af de ting der sættes op kræver adgang til bibliotekets WAYF konto, hvilket hurtigt kan forårsage en masse ping-pong.

drupal modul saml_sp

Der kan også kigges på https://drupal.org/project/saml_sp modulet for inspiration til at bruge php-saml fra OneLogin.

Virker lovende

Jeg kendte iike saml_sp  modulet og har ikke praktisk erfaring med OneLogins SAML implementation, men jo flere SimpleSAMLphp/WAYF/Drupal integrationer jeg har set på, jo mere interesseret er jeg i at få SimpleSAMLphp ud af ligningen.

saml_sp modulet er ikke specielt udbredt og har heller ingen officiel release, men jeg kunne godt tænke mig at undersøge om det kunne blive en del DINGs WAYF integration i stedet for.

Nemlog-in på odensebib.dk

Jeg har for nylig installeret Nemlog-in på vores ding2 site (https://www.odensebib.dk).

Ding_wayf koden virker til ding2, så du kan tilføje linket https://github.com/ding2/ding_wayf, som kilde til ding_wayf.

Jeg har lidt ændringer og tilføjelser til vejledningen:

  • Simplesaml-1.11.0
  • Nginx konfiguration:
    • location ~ ^/simplesaml/(.+\.php.*)$ {
        alias /var/simplesamlphp/www/$1;
        fastcgi_pass 127.0.0.1:9090;
      #  fastcgi_index index.php;
      #  fastcgi_param SCRIPT_FILENAME /var/simplesamlphp/$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/simplesamlphp/php-nginx-error.log";
        include fastcgi_params;
      #  fastcgi_param SERVER_PORT 443;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_split_path_info ^(.+\/module\.php)(/.+)$;
      }

      location ~ /simplesaml(.*) {
        autoindex on;
        alias /var/simplesamlphp/www/$1;
      }

      location ~ ^/simplesaml/(.*) {
        alias /var/simplesamlphp/www/$1;
      }

  • Man skal/behøver ikke bruge domænets certifikat. Generer i stedet et self-signed certifikat som beskrevet i docs/simplesamlphp-sp.txt:
    • "openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out saml.crt -keyout saml.pem"
  • I authsources.php skal
    • 'sign.authnrequest' => TRUE,
    • 'sign.logout' => TRUE,
  • http://wayf.dk/da/tjenester/metadata kan man hente "SAML 2-metadata til tjenesteudbyder", som man skal kopiere ind i på metadata konverteringssiden i den simplesamlphp man lige har installeret.
    • Konverteringssiden findes ved at klikke på "federation" og så under "tools" er "XML to simpleSAMLphp metadata converter".
  • Det vil også være meget naturligt at bruge mysql f.eks. 'store.sql.dsn' => 'mysql:host=localhost;port=3306;dbname=simplesaml',

Dejligt at endnu et vigtigt

Dejligt at endnu et vigtigt modul for ding2 er tjekket igennem. Det bliver også aktuelt for Vejle Bibliotekerne at få på, så vi vil også prøve det af når vi går over på ding2.