Skip to content

Google OAuth

kesurof edited this page May 28, 2021 · 2 revisions

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.
01-clouldflare-dns-records-for-traefik-google-oauth-740x265

Nous allons à nouveau créer un projet cette fois pour traefik Google oAuth

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 !

  • Cliquez sur Créer un projet

creer_un_projet


  • Entrer le nom du projet oauth puis cliquer sur Créer

creation_projet


  • Dans la notification en haut à droite, cliquer sur "sélectionner un projet"

notification

Après l'installation cliquer sur "identifiants"

identifiant

Dans la nouvelel fenetre, cliquer sur "Créer des identifiants" puis sur "ID client OAuth" creation_identifiant


Il y a une étape intermédiaire, cliquer sur "Configurer l'écran d'autorisation"
configurer oauth


puis sélectionner "externe" et Créer
externe

Dans la nouvelle fenêtre, remplissez les champs :

  • Nom de l'application => identique au nom du projet
  • Adresse e-mail d'assistance utilisateur => sélectionner celle du compte google
  • Coordonnées du développeur (Adresse email) => Entrer votre email

Sur chaque étapes, cliqurer en bas sur enregistrer

etapes

Une fois terminé, cliquer à nouveau sur "Identifiants" sur la gauche de l'écran
Puis :

  • Créer des identifiants
  • ID client OAuth
  • Type d'application => Application web
  • Nom => identique au nom du projet
  • URI => https://oauth.example.com/_oauth
    oauth


Vous aurez besoin par la suite de ces identifiants pour créer votre Rclone.

identifians_ok

  • Copier sur un bloc note le CLIENT ID et le CLIENT SECRET

google-apps-script-api-client-id-et-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.

projets-google-api-identifiants


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`)'
Clone this wiki locally