Un exemple de SSO avec Authelia et Owntone

Veuillez vous référer à l'article précédent pour comprendre ce qu'est le SSO et comment installer et configurer Authelia.

Qu'est-ce qu'Owntone ?

Owntone preview

Owntone est un probablement le meilleur serveur média open source.

Contrairement à Navidrome et aux autres serveurs compatibles subsonic, ce serveur est conçu pour diffuser votre collection de musique localement (sur vos enceintes Airplay, UPnP, ou même votre ordinateur), et/ou à distance via un streaming HTTP.

Son interface est probablement la plus claire que vous puissiez trouver ici, elle n'est pas encombrée et fonctionne avec très peu de ressources sur votre serveur.

Considérez-le comme un serveur MPD survitaminé qui peut jouer à partir de n'importe où (il peut diffuser littéralement à partir de n'importe quelle source, même un pipe alimenté par des données audio brutes) vers n'importe où.

Pourtant, il s'agit d'une application mono-utilisateur qui ne fournit aucun mécanisme d'authentification (à l'exception d'un seul compte administrateur).

Vous ne pouvez généralement pas exposer ce serveur sur Internet, car vous ne voulez pas qu'un internaute lambda fasse exploser vos haut-parleurs avec la pire chanson de votre collection.

C'est exactement là qu'une solution de SSO comme Authelia s'impose car elle empêche les utilisateurs non authentifiés de voir et interagir avec ce serveur.

Mise en place d'Owntone

Je vous recommande de suivre les étapes d'installation à partir d'ici

Je me concentre sur la sécurisation de l'application une fois qu'elle est correctement installée sur votre serveur.

Une fois que vous êtes satisfait de l'application, vous devez changer quelques clés de configuration pour qu'elle fonctionne avec le SSO.

Une fois de plus, nous allons exécuter l'application owntone derrière un reverse proxy, typiquement NGINX. Nous n'avons donc pas besoin qu'il écoute sur votre réseau local, seulement sur son loopback privé local. NGINX écoutera le web, fournira les canaux SSL/TLS pour HTTPS, et gérera la charge.

Authelia sera utilisé pour s'assurer que toute personne essayant d'y accéder est autorisée à le faire.

La première étape est donc de sécuriser owntone en changeant les clés de configuration de façon à ce qu'elles ressemblent à ceci :

general {
[...]
    admin_password = "whateveryoudontcaresinceitsnotused"
    websocket_port = 3688
    websocket_interface = "lo"
    ipv6 = true
    bind_address = "::"

Redémarrez owntone et assurez-vous qu'il fonctionne toujours comme prévu. Vous ne pouvez y accéder que via votre serveur, pas depuis un ordinateur distant, évidemment. Si vous avez besoin d'y accéder depuis un ordinateur distant, vous devrez tunneler la connexion via SSH (-L3688:localhost:3688 -L3689:localhost:3689).

Configuration de NGINX

C'est assez simple puisqu'il s'agit d'une simple configuration de proxy. Il y a une subtilité ici, Owntone écoute sur 2 ports, un pour le serveur HTTP et un pour le serveur Websocket, donc votre configuration proxy aura 2 blocs server (3 si vous tenez compte de la redirection HTTP vers HTTPS).

Cela ressemblera à ceci (sauvegardé dans /etc/nginx/sites-available/music.myhome.com) :

server {
    listen       80;
    server_name  music.myhome.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name  music.myhome.com;

    include snippets/authelia.conf;

    location / {
       proxy_pass http://127.0.0.1:3689/;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";

       include snippets/auth.conf;
    }        

    ssl_certificate /etc/letsencrypt/live/music.myhome.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/music.myhome.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

# Need to proxy websocket port too.
server {
    listen SERVERIPHERE:3688 ssl;
    server_name music.myhome.com;

    ssl_certificate /etc/letsencrypt/live/music.myhome.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/music.myhome.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    include snippets/authelia.conf;

    location / {
       proxy_pass http://127.0.0.1:3688/;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";

       include snippets/auth.conf;
    }
}

Vous devrez ajuster le nom du serveur (music.myhome.com) et l'adresse IP locale du serveur (SERVERIPHERE). Vous ne pouvez pas simplement faire écouter NGINX sur n'importe quelle interface sur le port 3688 (websocket) puisque Owntone écoute déjà sur l'interface loopback, donc vous devez spécifier l'adresse IP de la connexion de votre serveur à l'internet (typiquement, l'adresse IP de votre réseau local).

Veuillez noter les 2 snippets inclus. La section dans le bloc server crée une route virtuelle (/authelia) qui est interne à NGINX (non servie du public) et qui relaie l'authentification Authelia pour qu'elle fonctionne dans le même domaine que votre application. De cette façon, il peut configurer et vérifier les cookies pour le domaine music.myhome.com.

L'autre extrait vérifie simplement l'authentification pour toute requête vers Owntone avant de l'envoyer au serveur mandataire. Si l'authentification est accordée, le proxy fonctionne, sinon une redirection 302 est effectuée vers la page de login Authelia dans auth.myhome.com.

Créez le lien pour activer le serveur :

$ sudo ln -sf /etc/nginx/sites-available/music.myhome.com /etc/nginx/sites-enabled/music.myhome.com

Redémarrez NGINX via l'habituel sudo systemctl restart nginx et naviguez jusqu'à https://music.myhome.com. Vous aurez accès à la page de login Authelia et serez ensuite directement redirigé vers Owntone.

Si cela échoue, il se peut que vous n'ayez pas encore le certificat SSL, donc vous devrez réécrire le chemin dans les lignes ssl_certificate vers le certificat (invalide) de votre myhome.com, puis lancer certbot pour récupérer un certificat pour music.myhome.com via l'habituel sudo certbot run -d music.myhome.com --nginx.

Félicitations, c'était facile !

Article précédent Article suivant