SVN客户端在哪里存储用户认证数据?

Posted

技术标签:

【中文标题】SVN客户端在哪里存储用户认证数据?【英文标题】:Where does SVN client store user authentication data? 【发布时间】:2010-12-08 23:40:47 【问题描述】:

我正在尝试模拟我们在特定域 ID 上遇到的问题,该问题在访问 subversion 存储库时存在问题。为此,我尝试了svn checkout 在另一台 Windows 机器上选择 --username domain\problematic_ID。但我无法重现该问题,因为使用我自己的 ID 结帐仍然成功。这让我想知道 SVN 是否将用户身份验证数据缓存在多个地方,如果有,在哪里缓存。

我已清除应用程序数据区域中的身份验证目录,更改了配置文件中的选项以禁用用户身份验证数据的缓存 - 但无济于事。系统甚至不会提示我输入新的用户名和密码,而只是用旧 ID 签出。(通过查看 SVN 日志,我知道它是在使用的旧 ID)。我显然在这里遗漏了一些东西——但是什么? :-(

有人知道吗?

我使用的subversion客户端版本是1.4.6(r28521)

【问题讨论】:

【参考方案1】:

在 Unix 上,它位于 $HOME/.subversion/auth 中。

在 Windows 上,我认为是:%APPDATA%\Subversion\auth

【讨论】:

在 Windows Server 2008 上,我在 C:\Users\\AppData\Roaming\Subversion\auth 下找到它 在 iSeries 上,它是 jsvn,我得到 /home/USER/.subversion/auth/svn.simple/_very_long_hexa_,其中包含我的 id...【参考方案2】:

听起来您所做的一切都完全按照client credential section of the Subversion book 的建议进行。我唯一能想到的是服务器没有要求用户名和密码,因为它是从其他地方获取的。

【讨论】:

这是一个非常旧的链接。 服务器并不总是提示/询问客户端信息。有时(基于配置)服务器接受“基本身份验证”,例如用于登录客户端主机的身份验证。所以 --username 不会总是产生提示,除非配置为这样做!经过一番挣扎,我想通了这一点,并认为我会在这里记录下来以供参考。感谢您的提示。 现在是 2016 年,删除 svn.simple 中生成的缓存文件仍然有效... ++【参考方案3】:

你使用哪个版本?

这里是the documentation on credential caching,最新版本(截至写作时为 1.6)。

在 Windows 上,Subversion 客户端 将密码存储在 %APPDATA%/Subversion/auth/ 目录。 在 Windows 2000 及更高版本上, 标准 Windows 加密服务 用于加密密码 磁盘。因为加密密钥是 由 Windows 管理并与 用户自己的登录凭据,只有 用户可以解密缓存的密码。 (请注意,如果用户的 Windows 帐户密码由 管理员,所有缓存的 密码变得无法破译。这 Subversion 客户端将表现为 尽管它们不存在,但提示 需要时输入密码。)

另外,请注意 a few changes 出现在版本 1.6 中关于密码存储。

【讨论】:

您仍然可以访问此版本的文档 (svnbook.red-bean.com/en/1.4/…),但路径保持不变。 TortoiseSVN 允许您从 GUI 中清除身份验证数据,如果这有帮助的话。在这里,如果我删除了上面和其他帖子中提到的文件,下次需要它们时会询问我的凭据(根据访问控制策略文件)。 出于好奇,您能否详细说明您是如何知道用于结账的 ID 的?你提到了 SVN 日志,是哪些? @RedGlyph:我已经为颠覆行动开启了一些自定义日志记录,以便为我提供更有意义的报告。您可以在 http.conf 文件 (methinks) 中执行此操作,但在我们的设置中,我们有一个单独的 conf 文件,用于 subversion 配置的 apache 部分。如果你这样添加一行 - CustomLog logs/svn_log "%t %u %SVN-ACTIONe" env=SVN-ACTION 就在 conf 文件中的 部分之后,你可以获得一些很好的整洁的日志记录SVN 动作。有关详细信息,请参见此处。 (在操作日志中)subversion.tigris.org/svn_1.3_releasenotes.html【参考方案4】:

我知道我提出了一个非常古老的话题,但是在与这个问题苦苦挣扎了几个小时并且在其他任何地方都没有找到解决方案之后,我认为这是一个回答的好地方。

我们有一些基于 WindowsXP 的构建服务器,发现了这个问题:svn 命令行客户端没有缓存身份验证凭据。

我们终于发现我们使用的是 Cygwin 的 svn 客户端!不是“本机”Windows。所以...此客户端将所有身份验证凭据存储在 /home//.subversion/auth

Cygwin 中的 /home 目录,在我们的安装中位于 c:\cygwin\home。并且:问题是运行 svn 的 Windows 用户从未在 Cygwin 中“登录”过,因此没有 /home/ 目录。

来自 Windows 命令终端的简单“bash -ls”创建了该目录,在第一次访问我们的 SVN 服务器后,通过交互式提示输入访问凭据,唉,它们被缓存了。

因此,如果您使用的是 Cygwin 的 svn 客户端,请务必为本地 Windows 用户创建一个“主”目录。

【讨论】:

【参考方案5】:

在 Windows 上,您可以在下面找到它。

%USERPROFILE%\AppData\Roaming\Subversion\auth\svn.simple (下同)%APPDATA%\Roaming\Subversion\auth\svn.simple

此目录下可能有多个文件,具体取决于您贡献的存储库。您可以假设这是每个 svn 服务器的一个文件。您可以使用任何文本编辑器打开该文件,并确保您要删除正确的文件。

【讨论】:

【参考方案6】:

阅读SVNBook | Client Credentials。

使用现代 SVN,您只需运行 svn auth 即可显示缓存凭据列表。不要忘记确保您运行最新的 SVN 客户端版本,因为 svn auth 是在 1.9 版中引入的。最后一行将指定凭证存储的路径,在 Windows 上默认为 %APPDATA%\Subversion\auth,在类 Unix 系统上默认为 ~/.subversion/auth/

PS C:\Users\MyUser> svn auth
------------------------------------------------------------------------
Credential kind: svn.simple
Authentication realm: <https://svn.example.local:443> VisualSVN Server
Password cache: wincrypt
Password: [not shown]
Username: user

Credentials cache in 'C:\Users\MyUser\AppData\Roaming\Subversion' contains 5 credentials

【讨论】:

以上是关于SVN客户端在哪里存储用户认证数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用本地 SVN 服务器时,我的本地文件在哪里:TortoiseSVN 客户端?

基于jwt的用户登录认证

在Jenkins中认证和授权svn的用户名和密码报错,求大神指点

web访问时,用户信息和数据存储在哪里

雪花表存储在哪里?

token存在redis里有啥用