Authentification à deux facteurs (A2F) via Python
Il est possible d'utiliser un script Python pour générer les codes d'authentification à deux facteurs (A2F) demandé par l'Université. Combiné avec le logiciel d'expansion de texte Espanso (pour Windows) ou Hammerspoon (pour macOS), vous pourrez facilement fournir un code A2F lorsque demandé sans avoir à ouvrir un autre logiciel ou envoyer le code sur votre téléphone. La procédure ci-dessous vous donnera les grandes étapes pour configurer le tout sur votre ordinateur Windows, Mac ou Linux.
Pré-requis
Notez qu'il nous est impossible de tester toutes les versions existantes des divers systèmes d'opération, vous devez donc avoir sur votre ordinateur:
- une version à jours de Windows 10/11, ou
- macOS 10.14 ou plus récente, ou
- une version récente de Linux
Vous devez pouvoir exécuter les logiciels suivants pour faire fonctionner cette solution:
- Python version 3 (toutes plateformes)
- Espanso (pour Windows)
- Hammerspoon (pour macOS)
En bas vous trouverez l'explication détaillé
Installation sous Windows
Pour la plateforme Windows, vous pouvez utiliser le fichier d'installation lié ici pour effectuer l'installation de toutes les composantes nécessaire, soit Python, Espanso et le script. Téléchargez le fichier puis exécutez-le.
Vers la fin de l'installation, une fenêtre de commande vous demandera d'entrer votre clé TOTP afin de terminer l'installation. Entrez votre clé puis appuyez sur Enter. Si vous ne savez pas où obtenir votre clé TOTP, consultez la mini-procédure suivante.
Après que votre clé TOTP soit entrée, vous pourrez maintenant utiliser la fonction d'expansion de texte d'Espanso pour obtenir votre code A2F. Lorsqu'une invite vous demandera votre code, vous n'aurez qu'à entrer:
:code
dans le champ et il sera automatiquement remplacé par un code d'authentification.
Installation sous macOS
Voici les étapes à suivre pour installer la solution sous macOS.
Python version 3
Ouvrez une invite de commande puis entrez la commande suivante pour vérifier la version de Python installé sur votre système:
python --version
- Si la version commence par 3 vous n'avez rien à faire.
- Si vous recevez une erreur command not found: python, ré-essayez avec la commande python3 --version à la place et assurez-vous d'avoir une version de Python 3 (les dernières versions de macOS n'incluent plus la commande python par défaut, seul python3 est présent)
- Si la version commence par 2 ou qu'il n'y a aucun python d'installé, vous devrez télécharger et installer la version 3 de Python. Consultez la page de téléchargement de Python pour obtenir le fichier d'installation pour macOS puis installez-le. Si vous êtes utilisateur de Homebrew vous pouvez aussi l'installer avec la commande brew install python. Notez que cette version de Python sera installé dans un répertoire différent pour ne pas entrer en conflit avec la version de Python qui est installée par défaut sur macOS. Une fois l'installation complétée, ouvrez une fenêtre de commande et entrez la commande suivante (notez le 3 à la fin de python):
python3 --version
vous devriez voir une version commençant par 3.
Modules Python
Le script a besoin de trois modules python supplémentaires pour fonctionner. Ouvrez une fenêtre de commande puis entrez la commande suivante pour les installer:
pip3 install --user pyotp keyring pyperclip
Installation du script
Téléchargez le script ici puis sauvegardez le dans votre répertoire maison. Ouvrez ensuite une fenêtre de commande et exécutez le script manuellement afin d'y entrer votre clé TOTP:
python3 $HOME/getTotp.py
Si vous ne savez pas où obtenir votre clé TOTP, consultez la mini-procédure suivante. Une fois votre clé sauvegardée, vous n'aurez plus à exécuter le script manuellement. On vous recommande fortement de sauvegarder votre clé TOTP dans un endroit sécuritaire (une gestionnaire de mot de passe ou autre logiciel similaire) au cas où il faudrait réinstaller votre ordinateur ou si vous voulez utiliser le script sur plusieurs ordinateurs.
Installation de Hammerspoon
Téléchargez la dernière version de Hammerspoon directement de leur site web:
https://github.com/Hammerspoon/hammerspoon/releases/latest
puis décompressez le fichier .zip et déplacez l'application décompressée dans votre dossier Applications.
Alternativement installez-le via Homebrew avec la commande brew install --cask hammerspoon.
Une fois installé, exécutez l'application Hammerspoon pour la première fois et suivez les instruction pour lui donner accès aux fonctions d'Accessibilité de macOS. Ceci est nécessaire au bon fonctionnement de l'application.
L'icône de Hammerspoon devrait maintenant apparaître en haut de votre écran. Cliquez dessus et choisissez l'option Preferences. Assurez-vous que Launch Hammerspoon at login est bien coché, ajustez les autres préférences selon vos goûts. Fermez les préférences puis cliquez à nouveau sur l'icône de Hammerspoon et choisissez l'option Open config. Dans la fenêtre qui va apparaître, entrez le script suivant:
hs.hotkey.bind({"alt" }, "4", function() hs.alert.closeAll() hs.alert.show("OTP UdeM Copiée en mémoire!") ok,result = hs.applescript('do shell script "/usr/bin/python3 ~/getTotp.py -c"') ok,result = hs.applescript('do shell script "/usr/bin/python3 ~/getTotp.py"') hs.alert.show(result,hs.styledtext,hs.screen.mainScreen(),10 ) end)
Note importante: si vous avez installé Python manuellement ou via Homebrew, il se peut que votre Python se trouve ailleur que dans /usr/bin. Si vous recevez des erreurs, ouvrez une fenêtre de commande et entrez la commande which python3. Ajustez les deux lignes du script ci-haut qui contiennent /usr/bin/python3 en conséquence d'où votre python3 se trouve sur votre système.
Sauvegardez le script et quittez l'éditeur, puis cliquez à nouveau sur l'icône de Hammerspoon en haut de votre écran et choisissez l'option Reload config. Vous devriez maintenant pouvoir faire la combinaison de touches Option-4 sur votre clavier et vous recevrez 2 messages, un vous disant que la clé OTP a été copiée en mémoire et un deuxième message vous affichant la clé courante. Vous pourrez alors utiliser la fonction Coller dans n'importe quelle application qui vous demande votre code d'authentification.
Installation sous Linux
Voici les étapes à suivre pour installer la solution sous Linux.
Python version 3
Ouvrez un terminal et vérifiez la version de Python qui est installé:
python --version
Si vous n'avez pas la version 3, veuillez suivre les instructions de votre distribution afin d'installer Python 3. Ces instructions diffèrent selon chaque distribution et seraient trop vaste pour les inclures ici. Notez aussi que Python version 2 n'est plus supporté, donc si votre distribution l'utilisent encore comme version principale, il serait pertinent de considérer une migration vers une version plus récente de votre distribution ou une autre distribution.
Modules Python
Le script a besoin de deux modules python supplémentaires pour fonctionner. Ouvrez un terminal puis entrez la commande suivante pour les installer:
pip3 install --user pyotp keyring
Installation du script
Téléchargez le script ici puis sauvegardez le dans votre répertoire maison. Ouvrez ensuite un terminal et exécutez le script manuellement afin d'y entrer votre clé TOTP:
python3 $HOME/getTotp.py
Si vous ne savez pas où obtenir votre clé TOTP, consultez la mini-procédure suivante. Une fois votre clé sauvegardée, vous n'aurez plus à exécuter le script manuellement.
Installation d'Espanso
Le site d'Espanso contient les instructions d'installation pour les distributions Debian/Ubuntu, Manjaro/Arch, ainsi qu'une procédure d'installation manuelle pour toutes les autres distributions. Portez attentions aux pré-requis nécessaire à Espanso.
Configuration d'Espanso
Téléchargez ce script de configuration dans votre répertoire maison puis dans une fenêtre de commande exécutez ceci:
chmod +x configEspanso.sh ./configEspanso.sh
Ceci ajoutera les configuration nécessaire à Espanso pour vous fournir un code TOTP sur demande. Lorsqu'une invite vous demandera votre code, vous n'aurez qu'à entrer:
:code
dans le champ et il sera automatiquement remplacé par un code d'authentification.