|
Version Control with Subversion - Network Model - Client Credentials Caching
Client Credentials Caching
Many servers are configured to require authentication on
every request. This can become a big annoyance to users, who
are forced to type their passwords over and over again.
Happily, the Subversion client has a remedy for this: a
built-in system for caching authentication credentials on
disk. By default, whenever the command-line client
successfully authenticates itself to a server, it saves the
credentials in the user's private runtime configuration
area—in ~/.subversion/auth/ on
Unix-like systems or
%APPDATA%/Subversion/auth/ on Windows.
(The runtime area is covered in more detail in
the section called “Runtime Configuration Area”.) Successful credentials are
cached on disk, keyed on a combination of hostname, port, and
authentication realm.
When the client receives an authentication challenge, it
first looks for the appropriate credentials in the disk cache;
if not present, or if the cached credentials fail to
authenticate, then the client simply prompts the user for the
information.
Security-conscious people may be thinking to themselves,
“Caching passwords on disk? That's terrible! You
should never do that!” Please remain calm, it's not as
dangerous as it sounds.
-
The auth/ caching area is
permission-protected so that only the user (owner) can
read data from it, not the world at large. The operating
system's own file permissions are protecting the
password.
-
On Windows 2000 and later, the Subversion client uses
standard Windows cryptography services to encrypt the
password on disk. Because the encryption key is managed
by Windows and is tied to the user's own login
credentials, only the user can decrypt the cached
password. (Note: if the user's Windows account
password is changed, all of the cached passwords become
undecipherable. The Subversion client will behave as if
they don't exist, prompting for passwords when
required.)
-
For the truly paranoid willing to sacrifice all
convenience, it's possible to disable credential caching
altogether.
To disable caching for a single command, pass the
--no-auth-cache option:
$ svn commit -F log_msg.txt --no-auth-cache
Authentication realm: <svn://host.example.com:3690> example realm
Username: joe
Password for 'joe':
Adding newfile
Transmitting file data .
Committed revision 2324.
# password was not cached, so a second commit still prompts us
$ svn delete newfile
$ svn commit -F new_msg.txt
Authentication realm: <svn://host.example.com:3690> example realm
Username: joe
…
Or, if you want to disable credential caching permanently,
you can edit your runtime config file
(located next to the auth/ directory).
Simply set store-auth-creds to
no , and no credentials will be cached on
disk, ever.
[auth]
store-auth-creds = no
Sometimes users will want to remove specific credentials
from the disk cache. To do this, you need to navigate into
the auth/ area and manually delete the
appropriate cache file. Credentials are cached in individual
files; if you look inside each file, you will see keys and
values. The svn:realmstring key describes
the particular server realm that the file is associated
with:
$ ls ~/.subversion/auth/svn.simple/
5671adf2865e267db74f09ba6f872c28
3893ed123b39500bca8a0b382839198e
5c3c22968347b390f349ff340196ed39
$ cat ~/.subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28
K 8
username
V 3
joe
K 8
password
V 4
blah
K 15
svn:realmstring
V 45
<https://svn.domain.com:443> Joe's repository
END
Once you have located the proper cache file, just delete
it.
One last word about client authentication behavior: a bit
of explanation about the --username and
--password options is needed. Many client
subcommands accept these options; however it is important to
understand using these options
does not
automatically send credentials to the server. As discussed
earlier, the server “pulls” credentials from the
client when it deems necessary; the client cannot
“push” them at will. If a username and/or
password are passed as options, they will
only
be presented to the server if the
server requests them.
[23]
Typically, these options are used when:
-
the user wants to authenticate as a different user
than her system login name, or
-
a script wants to authenticate without using cached
credentials.
Here is a final summary that describes how a Subversion
client behaves when it receives an authentication
challenge:
-
Check whether the user specified any credentials as
command-line options, via --username
and/or --password . If not, or if these
options fail to authenticate successfully, then
-
Look up the server's realm in the runtime
auth/ area, to see if the user already
has the appropriate credentials cached. If not, or if the
cached credentials fail to authenticate, then
-
Resort to prompting the user.
If the client successfully authenticates by any of the
methods listed above, it will attempt to cache the credentials
on disk (unless the user has disabled this behavior, as
mentioned earlier).
[an error occurred while processing this directive]
|
|