docs: discuss caching personal access tokens
PATCH 1/1 docs: discuss caching personal access tokens
From: M Hickford <[email protected]>
Describe problems storing personal access tokens in git-credential-cache and suggest alternatives.
Research suggests that many users are confused about this:
Quoted 4 lines
the point of passwords is that (ideally) you memorise them [so] they're never stored anywhere in plain text. Yet GitHub's personal access token system seems to basically force you to store the token in plain text?
---
docs: discuss caching personal access tokens
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1851%2Fhickford%2Fcache-pat-docs-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1851/hickford/cache-pat-docs-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1851
Documentation/git-credential-cache.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
Documentation/git-credential-cache.txt +17 -0
@@ -78,6 +78,23 @@ variable (this example increases the cache time to 1 hour): $ git config credential.helper 'cache --timeout=3600' ------------------------------------------------------- +PERSONAL ACCESS TOKENS +---------------------- + +Some remotes accept personal access tokens, which are randomly +generated and hard to memorise. They typically have a lifetime of weeks +or months. + +git-credential-cache is inherently unsuitable for persistent storage of +personal access tokens. The credential will be forgotten after the cache +timeout. Even if you configure a long timeout, credentials will be +forgotten if the daemon dies. + +To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage. Alternatively, configure an +OAuth credential helper to generate credentials automatically. See +linkgit:gitcredentials[7]. + GIT --- Part of the linkgit:git[1] suite
base-commit: 14650065b76b28d3cfa9453356ac5669b19e706e
Signature · 1 line
gitgitgadget
Quoted 6 lines · M Hickford via GitGitGadget
From: M Hickford <[email protected]>
Describe problems storing personal access tokens in git-credential-cache and suggest alternatives.
Documentation/git-credential-cache.txt +1
-0+PERSONAL ACCESS TOKENS
Documentation/git-credential-cache.txt variable (this example increases the cache time to 1 hour): · line 91
Quoted 10 lines
Documentation/git-credential-cache.txt +10
-0+---------------------- + +Some remotes accept personal access tokens, which are randomly +generated and hard to memorise. They typically have a lifetime of weeks +or months. + +git-credential-cache is inherently unsuitable for persistent storage of +personal access tokens. The credential will be forgotten after the cache +timeout. Even if you configure a long timeout, credentials will be +forgotten if the daemon dies.
Very true.
Review
Quoted 2 lines
(quoted diff) +2
-0+To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage.
Like libsecret and osxkeychain, you mean? I am wondering if we want to be a bit more helpful by being explicit. I think there is a section in a maual page that has a list of known and often-used credential backends, so referring the readers to that section may be helpful.
Documentation/git-credential-cache.txt variable (this example increases the cache time to 1 hour): · line 96
Quoted 3 lines
Alternatively, configure an
Documentation/git-credential-cache.txt +2
-0+OAuth credential helper to generate credentials automatically. See +linkgit:gitcredentials[7].
Indeed.
Quoted 23 lines · Junio C Hamano
Subject: Re: [PATCH] docs: discuss caching personal access tokens
Quoted 6 lines · M Hickford via GitGitGadget
From: M Hickford <[email protected]>
Describe problems storing personal access tokens in git-credential-cache and suggest alternatives.
(quoted diff) +1
-0+PERSONAL ACCESS TOKENSReview
Quoted 10 lines
(quoted diff) +10
-0+---------------------- + +Some remotes accept personal access tokens, which are randomly +generated and hard to memorise. They typically have a lifetime of +weeks or months. + +git-credential-cache is inherently unsuitable for persistent storage +of personal access tokens. The credential will be forgotten after the +cache timeout. Even if you configure a long timeout, credentials will +be forgotten if the daemon dies.Very true.
Quoted 4 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage.Like libsecret and osxkeychain, you mean? I am wondering if we want to be
a bit
Quoted 1 line
more helpful by being explicit. I think there is a section in a maual page
that has a
Quoted 1 line
list of known and often-used credential backends, so referring the readers
to that
Quoted 7 lines
section may be helpful.
Documentation/git-credential-cache.txt variable (this example increases the cache time to 1 hour): · line 96
Quoted 3 lines
Alternatively, configure an
Documentation/git-credential-cache.txt +2
-0+OAuth credential helper to generate credentials automatically. See +linkgit:gitcredentials[7].Indeed.
My solution for this is to write a custom credential manager that is PAT aware. The one I built
does not support OAuth or OAuth2. This is non-trivial when dealing with a CLI. Integrating
with something like MS Authenticator might be a reasonable option for some.
Quoted 22 lines · Junio C Hamano
Quoted 6 lines · M Hickford via GitGitGadget
From: M Hickford <[email protected]>
Describe problems storing personal access tokens in git-credential-cache and suggest alternatives.
Documentation/git-credential-cache.txt +1
-0+PERSONAL ACCESS TOKENSDocumentation/git-credential-cache.txt variable (this example increases the cache time to 1 hour): · line 91
Quoted 10 lines
Documentation/git-credential-cache.txt +10
-0+---------------------- + +Some remotes accept personal access tokens, which are randomly +generated and hard to memorise. They typically have a lifetime of weeks +or months. + +git-credential-cache is inherently unsuitable for persistent storage of +personal access tokens. The credential will be forgotten after the cache +timeout. Even if you configure a long timeout, credentials will be +forgotten if the daemon dies.Very true.
Quoted 8 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage.Like libsecret and osxkeychain, you mean? I am wondering if we want to be a bit more helpful by being explicit. I think there is a section in a maual page that has a list of known and often-used credential backends, so referring the readers to that section may be helpful.
I agree, explicit is more helpful. I shall expand that gitcredentials.txt section in patch v2.
Quoted 6 lines
Documentation/git-credential-cache.txt variable (this example increases the cache time to 1 hour): · line 96
Quoted 4 lines
Alternatively, configure an
Documentation/git-credential-cache.txt +2
-0+OAuth credential helper to generate credentials automatically. See +linkgit:gitcredentials[7].Indeed.
v2 cover docs: discuss caching personal access tokens
In reply to M Hickford via GitGitGadgetCC: [email protected] CC: [email protected] CC:
[email protected] CC: [email protected] CC: [email protected] cc:
[email protected]
Patch v2 adds a list of popular credential helpers.
M Hickford (2):
docs: list popular credential helpers
docs: discuss caching personal access tokens
Documentation/git-credential-cache.txt | 17 +++++++++++ Documentation/gitcredentials.txt | 41 ++++++++++++++++++-------- 2 files changed, 46 insertions(+), 12 deletions(-)
base-commit: 14650065b76b28d3cfa9453356ac5669b19e706e
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1851%2Fhickford%2Fcache-pat-docs-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1851/hickford/cache-pat-docs-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/1851
Range-diff vs v1:
-: ----------- > 1: 097eb0e8776 docs: list popular credential helpers 1: 1980f6a5aa7 ! 2: ac8c5e1b552 docs: discuss caching personal access tokens
@@ Documentation/git-credential-cache.txt: variable (this example increases the cac
+To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage. Alternatively, configure an +OAuth credential helper to generate credentials automatically. See
-+linkgit:gitcredentials[7].
++linkgit:gitcredentials[7], sections "Available helpers" and "OAuth".
+
GIT
---
Signature · 1 line
gitgitgadget
PATCH v2 1/2 docs: list popular credential helpers
From: M Hickford <[email protected]>
git-credential-store saves credentials unencrypted on disk. It is the least secure choice of credential helper. Nevertheless, it appears several times more popular than any other credential helper [1].
Inform users about more secure alternatives.
[1] https://stackoverflow.com/questions/35942754/how-can-i-save-username-and-password-in-git
--- Documentation/gitcredentials.txt | 41 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-)
Documentation/gitcredentials.txt +29 -12
@@ -66,18 +66,7 @@ storage provided by the OS or other programs. Alternatively, a credential-generating helper might generate credentials for certain servers via some API. -To use a helper, you must first select one to use. Git currently -includes the following helpers: - -cache:: - - Cache credentials in memory for a short period of time. See - linkgit:git-credential-cache[1] for details. - -store:: - - Store credentials indefinitely on disk. See - linkgit:git-credential-store[1] for details. +To use a helper, you must first select one to use (see below for a list). You may also have third-party helpers installed; search for `credential-*` in the output of `git help -a`, and consult the
@@ -106,6 +95,28 @@ $ git config --global credential.helper foo === Available helpers +Git currently includes the following helpers: + +cache:: + + Cache credentials in memory for a short period of time. See + linkgit:git-credential-cache[1] for details. + +store:: + + Store credentials indefinitely on disk. See + linkgit:git-credential-store[1] for details. + +Popular helpers with secure persistent storage include: + + - git-credential-libsecret (Linux) + + - git-credential-osxkeychain (macOS) + + - git-credential-wincred (Windows) + + - https://github.com/git-ecosystem/git-credential-manager[Git Credential Manager] (cross platform, included in Git for Windows) + The community maintains a comprehensive list of Git credential helpers at https://git-scm.com/doc/credential-helpers.
@@ -116,6 +127,12 @@ OAuth credential helper. Initial authentication opens a browser window to the host. Subsequent authentication happens in the background. Many popular Git hosts support OAuth. +Popular helpers with OAuth support include: + + - https://github.com/git-ecosystem/git-credential-manager[Git Credential Manager] (cross platform, included in Git for Windows) + + - https://github.com/hickford/git-credential-oauth[git-credential-oauth] (cross platform, included in many Linux distributions) + CREDENTIAL CONTEXTS -------------------
Signature · 1 line
gitgitgadget
PATCH v2 2/2 docs: discuss caching personal access tokens
In reply to M Hickford via GitGitGadgetFrom: M Hickford <[email protected]>
Describe problems storing personal access tokens in git-credential-cache and suggest alternatives.
Research suggests that many users are confused about this:
Quoted 4 lines
the point of passwords is that (ideally) you memorise them [so] they're never stored anywhere in plain text. Yet GitHub's personal access token system seems to basically force you to store the token in plain text?
--- Documentation/git-credential-cache.txt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
Documentation/git-credential-cache.txt +17 -0
@@ -78,6 +78,23 @@ variable (this example increases the cache time to 1 hour): $ git config credential.helper 'cache --timeout=3600' ------------------------------------------------------- +PERSONAL ACCESS TOKENS +---------------------- + +Some remotes accept personal access tokens, which are randomly +generated and hard to memorise. They typically have a lifetime of weeks +or months. + +git-credential-cache is inherently unsuitable for persistent storage of +personal access tokens. The credential will be forgotten after the cache +timeout. Even if you configure a long timeout, credentials will be +forgotten if the daemon dies. + +To avoid frequently regenerating personal access tokens, configure a +credential helper with persistent storage. Alternatively, configure an +OAuth credential helper to generate credentials automatically. See +linkgit:gitcredentials[7], sections "Available helpers" and "OAuth". + GIT --- Part of the linkgit:git[1] suite
Signature · 1 line
gitgitgadget