slideshare quotation-marks triangle book file-text2 file-picture file-music file-play file-video location calendar search wrench cogs stats-dots hammer2 menu download2 question cross enter google-plus facebook instagram twitter medium linkedin drupal GitHub quotes-close
LED panel

Il s'agit d'un simple blog technique parce que je devais le faire et qu'il n'y a littéralement aucune information disponible sur Internet!

Tout d'abord, un peu de contexte

Nous utilisons les Yubico YubiKeys depuis un certain temps comme l'un des outils d'authentification multifactorielle utilisés par nos systèmes. Que signifie l'authentification multifactorielle ? Il s'agit d'un scénario dans lequel une action, généralement sur Internet, nécessite plus d'un niveau d'authentification pour être réalisée.

Il s'agit souvent d'un mot de passe et d'un autre élément. Une expression que vous pourriez entendre pour décrire l'authentification multifactorielle, ou encore l'authentification à deux facteurs, est que la vérification de votre identité nécessite "quelque chose que vous savez et quelque chose que vous possédez".

La banque en ligne en est un exemple concret que la plupart d'entre vous connaissent. Si vous voulez ajouter un bénéficiaire à votre compte en utilisant la banque en ligne, vous devrez vous connecter avec un nom d'utilisateur et un mot de passe (quelque chose que vous connaissez), puis vous devrez probablement utiliser un de ces porte-clés fournis par votre banque ou une application téléphonique ou recevoir un SMS pour effectuer l'acte d'ajout d'un bénéficiaire (quelque chose que vous possédez, soit le porte-clés ou votre téléphone portable).

Facteurs d'authentification multiples, ou au moins deux facteurs différents. Quelqu'un peut connaître votre mot de passe, mais sans votre porte-clés ou votre téléphone, il ne lui est d'aucune utilité.

Ou vice versa, il peut voler votre badge bancaire, mais s'il ne connaît pas votre mot de passe, il ne lui sera d'aucune utilité. Il s'agit clairement d'un bon moyen de rendre les applications en ligne plus sûres.

Dans notre cas, l'une des choses que vous pouvez posséder est une YubiKey, de sorte qu'une simple pression sur le petit bouton situé sur le dessus fournit votre deuxième facteur d'authentification. Plus besoin d'aller chercher votre téléphone et de taper des codes SMS ou des codes d'authentification. Pratique !

Le logiciel de support des premières YubiKeys est assez vieux maintenant, mais ce ne sont que des applications PHP et nous voulons continuer à les utiliser, donc j'étais en train de les migrer vers les dernières versions de Debian (11) et PHP (8.0). Je ne voulais pas utiliser le serveur web Apache livré avec, car nous préférons Nginx en tant qu'organisation. Et je n'ai rien trouvé !

Il m'a fallu quelques bonnes heures de lecture de manuels et de tests avant de parvenir à créer une configuration fonctionnelle, alors en tant que bon développeur open-source, j'ai décidé de la partager. Voici à quoi ressemble une configuration fonctionnelle pour Nginx:

 

server {
    listen 80 default_server;
    server_name MYSERVER;
    error_log /var/log/nginx/error.log notice;
    access_log /var/log/nginx/access.log;
    root "/var/www";

    location ~ \.php(/|$) {
        include fastcgi_params;
        # Other app settings
        fastcgi_index verify.php;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        fastcgi_pass 127.0.0.1:9074;
    }

    location /wsapi/2.0/verify {
        include fastcgi_params;
        # Set the script path to the correct file
        set $path $request_uri;
        if ($request_uri ~ ^/wsapi/2.0/verify(.*)$ ) {
            set $path /verify.php$1;
        }
        # Configure fastcgi vars
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9074;
        fastcgi_index verify.php;
        fastcgi_param SCRIPT_FILENAME $document_root/wsapi/2.0/verify.php;
    }
}

Assurez-vous de définir fastcgi_pass en fonction de votre environnement, il se peut que ce soit un Unix socket au lieu d'une IP et d'un port comme le mien. Notre fichier fastcgi_params est plus ou moins le même que celui du manuel de Nginx :

Notez qu'il est très important que la variable Nginx $resource_uri ne soit pas modifiée et que ykval soit servi sur le path http://MYSERVER/wsapi/2.0/verify, car le code l'utilise pour vérifier quelle version de l'API il doit appliquer. Vous pouvez voir le code pour cela ici, ce qui démontre pourquoi c'est important :

Et c'est tout ! Rien de particulièrement compliqué, mais, espérons-le, un gain de temps pour quelqu'un qui est confronté au même défi.

Si vous souhaitez en savoir plus sur les services 2FA gratuits et open-source ou si vous avez besoin d'aide pour configurer des outils tels que YubiKeys, SimpleSAMLphp ou LinOTP2, contactez-nous.

 

Démarrons ensemble votre projet


Contactez-nous