web-dev-qa-db-fra.com

Où stocker le jeton d'accès personnel de GitHub?

Est-il nécessaire de stocker le jeton d'accès personnel quelque part localement sur la machine après l'avoir généré dans GitHub?

Si oui, existe-t-il un moyen privilégié de le stocker?

29

La moitié du but des mots de passe est que (idéalement) vous les mémorisez et que le système les hache, donc ils ne sont jamais stockés nulle part en texte brut.
Pourtant, le système de jeton d'accès personnel de GitHub semble vous obliger à stocker le jeton en texte brut?

Tout d'abord, un PAT (jeton d'accès personnel) n'est pas un simple mot de passe, mais un équivalent qui:

  • vous pouvez générer plusieurs heures (par exemple, une par machine à partir de laquelle vous devez accéder au référentiel GitHub)
  • vous pouvez révoquer à tout moment (depuis l'interface Web de GitHub), ce qui rend le PAT obsolète, même s'il reste sur une de ces machines.

Cela diffère de votre mot de passe, qui est unique à votre compte, et ne peut pas être facilement modifié sans avoir à également le modifier partout où vous l'utilisez.


Dans la mesure où un PAT peut être utilisé à la place d'un mot de passe lors de l'exécution d'opérations Git sur HTTPS avec Git sur la ligne de commande ou l'API, vous pouvez utiliser = assistant d'identification de git pour le mettre en cache de manière sécurisée.
Sous Windows, par exemple, cela utiliserait le Gestionnaire des informations d'identification Windows , via le GCM - Gestionnaire d'informations d'identification Git - pour Windows :

git config --global credential.helper manager

La première fois que vous appuyez sur un dépôt, une fenêtre contextuelle vous demandera vos informations d'identification: nom d'utilisateur et votre PAT.
La prochaine fois, il ne demandera pas et réutilisera directement ce PAT, qui reste stocké de manière sécurisée dans votre Credential Manager.

Une idée similaire s'applique pour Mac avec le trousseau OSX , et Linux avec le Porte-clés GNOME .
L'idée reste la suivante: stockez le PAT dans un magasin de données d'identification chiffrées .

21
VonC

Eh bien, vous devez enregistrer le jeton quelque part, lorsque vous ne souhaitez pas le saisir à chaque fois que votre application le demande :-)

Une bonne solution consiste à utiliser des variables d’environnement, comme déjà suggéré dans n commentaire .

Mais vous devez toujours définir la variable d'environnement quelque part.
Sous Windows (que j'utilise), vous pouvez utiliser le boîte de dialogue dans les paramètres système (je ne sais pas si d'autres systèmes d'exploitation ont quelque chose de similaire) .

Je ne fais pas cela, je préfère un script dans mon projet.
Dans un projet privé, peut commettez ceci dans le contrôle de source, mais ceci est une question de préférence.

Dans l'un de mes projets personnels, j'appelle également l'API GitHub, à l'aide d'un jeton d'accès personnel.
C'est une application en ligne de commande et l'utilisateur final enregistre le jeton dans un fichier de configuration (ce qui est OK).

Mais j’ai également besoin du jeton pour le développement, car le projet comporte des tests d’intégration pour lesquels j’appelle l’API GitHub.

Et ce projet est public sur GitHub, je ne pouvais donc pas enregistrer le jeton dans le contrôle de source.

Voici ce que j'ai fait:

Donc, je peux juste renommer ce fichier en environment-variables.bat, remplacez le faux mot de passe par le vrai et tout fonctionne.


Ce n'est pas la solution parfaite pour tous les cas, cependant.

Dans mon projet, le problème est que je dois utiliser plus de jetons/mots de passe pour plus d'API dans le futur.

Donc, le nombre de jetons dans mon environment-variables.bat augmentera , ce qui empêchera les contributeurs potentiels d’exécuter réellement tous les tests d’intégration. Et je reste je ne sais pas comment gérer ça .

2
Christian Specht

J'aime les garder chiffrés dans le référentiel et les charger avec .envrc _ ( https://direnv.net/ )

Pour ce faire, j'utilise ssh-vault pour chiffrer les données à l'aide de mon clés ssh que GitHub expose déjà , par exemple:

echo MY_TOKEN="secret" | ssh-vault -u <github-user> create > my-encypted-vars.ssh

Puis le contenu de .envrc ressemble à ceci:

echo "Enter ssh key password"
context=$(ssh-vault view $HOME/projects/my-encrypted.ssh | tail -n +2)
export ${context}

Cela déchiffrera les données dans my-encrypted-vars.ssh fichier et définissez MY_TOKEN dans mes variables d’environnement chaque fois que j cd dans le répertoire du projet.

Ce faisant, les jetons/variables sont stockés "en toute sécurité" et toujours prêts à être utilisés comme variables d'environnement.

2
nbari

En gros, je l'ai fait sur ma machine:

https://Gist.github.com/bsara/5c4d90db3016814a3d2fe38d314f9c2

Mon script de profil est légèrement différent de celui décrit:

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
        . "$env" >| /dev/null ; 
}

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
Elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env
1
memo