Google OAuth - laster13/patxav GitHub Wiki
Google OAuth2 vous permet d'utiliser votre compte Google pour vous connecter à vos services.
L’utilisation de Google OAuth avec Traefik permet d’inscrire des comptes dans la liste blanche, de mettre en œuvre la norme 2FA de Google et de fournir une authentification unique (SSO) à vos services.
Cela offre, non seulement l'avantage de ne pas avoir de demandes de connexions fréquentes, mais améliore également la sécurité.
Configuration Google OAuth2 Service
Note
Pour ceux qui utilisent Cloudflare, la création du CNAME est automatisée par le script, pour les autres pensez à le créer auprès de votre Registrar.
Nous allons à nouveau créer un projet cette fois pour traefik Google oAuth
Rendez vous à l'adresse suivante et connecté vous avec votre compte Gsuite : Google Apps Script API
ATTENTION : Vous devez être sur et certains de vous connecter au bon compte Google. Si vous en avez plusieurs, connectez-vous alors en fenêtre de navigation privée !
- cliquer sur le bouton bleu
Enable the Google Apps Script API
- entrer le nom du projet
traefik
- sélectionner
Web server
- renseigner votre domaine sous cette forme
https://oauth.example.com/_oauth
remplacer seulement example.com - cliquer sur done
Ne pas faire les étapes 2,3 et 4 qui sont décrites dans cette page et reprendre ensuite la suite de ce tuto.
-
Copier sur un bloc note le CLIENT ID et le CLIENT SECRET
Vous aurez besoin par la suite de ces identifiants.
Si vous avez fermer la fenêtre avec vos identifiants, vous pouvez les retrouver dans la rubrique identifiant de projet drive. Dashboard API.
BONUS
Google OAuth et NZB360, LunaSea etc...
L'idée est d'utiliser des règles spécifiques par exemple, si l'en-tête de requête contient l'API sabnzbd, radarr, sonarr etc .. on contourne l'authentification.
Du coup c'est un amalgame de middleware avec et sans authentification qui d'une manière plus générale déclenche l'authentification google Oauth via le web tout en permettant l'accès sur NZB360 et en préservant la sécurité d'accés.
La procédure est très simple, il suffit juste de changer les labels de traefik dans les applis sabnzbd, lidarr, sonarr, radarr, rutorrent.
Sabnzbd
Avant
traefik.enable: 'true'
## HTTP Routers
traefik.http.routers.sabnzbd-rtr.entrypoints: 'https'
traefik.http.routers.sabnzbd-rtr.rule: 'Host(`sabnzbd.{{user.domain}}`)'
traefik.http.routers.sabnzbd-rtr.tls: 'true'
## Middlewares
traefik.http.routers.sabnzbd-rtr.middlewares: "{{ 'chain-oauth@file' if oauth_enabled | default(false) else 'chain-basic-auth@file' }}"
## HTTP Services
traefik.http.routers.sabnzbd-rtr.service: 'sabnzbd-svc'
traefik.http.services.sabnzbd-svc.loadbalancer.server.port: '8080'
Après
traefik.enable: 'true'
traefik.http.routers.sabnzbd-rtr-bypass.entrypoints: 'https'
traefik.http.routers.sabnzbd-rtr-bypass.rule: 'Query(`apikey`, `api_de_sabnzbd`)'
traefik.http.routers.sabnzbd-rtr-bypass.priority: '100'
traefik.http.routers.sabnzbd-rtr-bypass.tls: 'true'
## HTTP Routers Auth
traefik.http.routers.sabnzbd-rtr.entrypoints: 'https'
traefik.http.routers.sabnzbd-rtr.rule: 'Host(`sabnzbd.{{user.domain}}`)
traefik.http.routers.sabnzbd-rtr.priority: '99'
traefik.http.routers.sabnzbd-rtr.tls: 'true'
## Middlewares
traefik.http.routers.sabnzbd-rtr-bypass.middlewares: 'chain-no-auth@file'
traefik.http.routers.sabnzbd-rtr.middlewares: 'chain-oauth@file'
## HTTP Services
traefik.http.routers.sabnzbd-rtr.service: 'sabnzbd-svc'
traefik.http.routers.sabnzbd-rtr-bypass.service: 'sabnzbd-svc'
traefik.http.services.sabnzbd-svc.loadbalancer.server.port: '8080'
Ne pas oublier de mettre la clé API à la place de api_de_sabnzbd. Ensuite réinitialiser avec le script
sonarr, radarr, lidarr
Même procédure que pour sabnzbd sauf un label que l'on va modifier.
traefik.http.routers.sonarr-rtr-bypass.rule: 'Headers(`X-Api-Key`, `api_sonarr`)'
rutorrent
Remplacer vos middlewares par ce qui suit :
traefik.enable: 'true'
traefik.http.routers.rutorrent-rtr-bypass.entrypoints: 'https'
traefik.http.routers.rutorrent-rtr-bypass.rule: 'Path(`/RPC2`)'
traefik.http.routers.rutorrent-rtr-bypass.priority: '100'
traefik.http.routers.rutorrent-rtr-bypass.tls: 'true'
## HTTP Routers Auth
traefik.http.routers.rutorrent-rtr.entrypoints: 'https'
traefik.http.routers.rutorrent-rtr.rule: 'Host(`rutorrent.{{user.domain}}`)'
traefik.http.routers.rutorrent-rtr.priority: '99'
traefik.http.routers.rutorrent-rtr.tls: 'true'
## Middlewares
traefik.http.routers.rutorrent-rtr-bypass.middlewares: 'chain-basic-auth@file'
traefik.http.routers.rutorrent-rtr.middlewares: 'chain-oauth@file'
## HTTP Services
traefik.http.routers.rutorrent-rtr.service: 'rutorrent-svc'
traefik.http.routers.rutorrent-rtr-bypass.service: 'rutorrent-svc'
traefik.http.services.rutorrent-svc.loadbalancer.server.port: '8080'
Par mesure de sécurité on rajoute une couche d'authentification basique pour l'acces à nzb360
Du coup pour faire fonctionner sonarr, radarr, lidarr à la fois sur NZb360 et LunaSea tu modifies le label de cette façon
traefik.http.routers.sonarr-rtr-bypass.rule: 'Headers(`X-Api-Key`, `b12d1732186a4376b80bdb3875a0f39d`) || Query(`apikey`, `b12d1732186a4376b80bdb3875a0f39d`)'