`
zhongxiucheng
  • 浏览: 70868 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Subversion客户端认证缓存问题

 
阅读更多

这部分是讨论了Subversion客户端和服务器怎样互相交流,不考虑具体使用的网络实现,通过阅读,你会很好的理解服务器的行为方式和多种客户端与之响应的配置方式。

Subversion客户端花费大量的时间来管理工作拷贝,当它需要版本库信息,它会做一个网络请求,然后服务器给一个恰当的回答,具体的网络协议细节对用户不可见,客户端尝试去访问一个URL,根据URL模式的不同,会使用特定的协议与服务器联系(见版本库的URL),用户可以运行svn --version来查看客户端可以使用的URL模式和协议。

当服务器处理一个客户端请求,它通常会要求客户端确定它自己的身份,它会发出一个认证请求给客户端,而客户端通过提供凭证给服务器作为响应,一旦认证结束,服务器会响应客户端最初请求的信息。注意这个系统与CVS之类的系统不一样,它们会在请求之前,预先提供凭证(“logs in”)给服务器,在Subversion里,服务器通过请求客户端适时地“拖入”凭证,而不是客户端“”出。这使得这种操作更加的优雅,例如,如果一个服务器配置为世界上的任何人都可以读取版本库,在客户使用svn checkout时,服务器永远不会发起一个认证请求。

如果客户端请求往版本库写入新的数据(例如svn commit),这会建立新的修订版本树,如果客户端的请求是经过认证的,认证过的用户的用户名就会作为svn:author属性的值保存到新的修订本里(见“未受版本控制的属性”一节)。如果客户端没有经过认证(换句话说,服务器没有发起过认证请求),这时修订本的svn:author的值是空的。[19]

许多服务器配置为在每次请求时要求认证,这对一次次输入用户名和密码的用户来说是非常恼人的事情。

令人高兴的是,Subversion客户端对此有一个修补:存在一个在磁盘上保存认证凭证缓存的系统,缺省情况下,当一个命令行客户端成功的在服务器上得到认证,它会保存一个认证文件到用户的私有运行配置区—类Unix系统下会在~/.subversion/auth/,Windows下在%APPDATA%/Subversion/auth/(运行区在“运行配置区”一节会有更多细节描述)。成功的凭证会缓存在磁盘,以主机名、端口和认证域的组合作为唯一性区别。

当客户端接收到一个认证请求,它会首先查找磁盘中的认证凭证缓存,如果没有发现,或者是缓存的凭证认证失败,客户端会提示用户需要这些信息。

十分关心安全的人们一定会想“把密码缓存在磁盘?太可怕了,永远不要这样做!”但是请保持冷静,首先,auth/是访问保护的,只有用户(拥有者)可以读取这些数据,不是整个世界,如果这对你还不够安全,你可以关闭凭证缓存,只需要一个简单的命令,使用参数--no-auth-cache

$ 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
[...]

或许,你希望永远关闭凭证缓存,你可以编辑你的运行配置文件(坐落在auth/目录),只需要把store-auth-creds设置为no,这样就不会有凭证缓存在磁盘。

[auth]
store-auth-creds = no

有时候,用户希望从磁盘缓存删除特定的凭证,为此你可以浏览到auth/区域,删除特定的缓存文件,凭证都是作为一个单独的文件缓存,如果你打开每一个文件,你会看到键和值,svn:realmstring描述了这个文件关联的特定服务器的域:

$ 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

一旦你定位了正确的缓存文件,只需要删除它。

客户端认证的行为的最后一点:对使用--username--password选项的一点说明,许多客户端和子命令接受这个选项,但是要明白使用这个选项不会主动地发送凭证信息到服务器,就像前面讨论过的,服务器会在需要的时候才会从客户端“”入凭证,客户端不会随意“”出。如果一个用户名和/或者密码作为选项传入,它们只会在服务器需要时展现给服务器。[20]通常,只有在如下情况下才会使用这些选项:

  • 用户希望使用与登陆系统不同的名字认证,或者

  • 一段不希望使用缓存凭证但需要认证的脚本

这里是Subversion客户端在收到认证请求的时候的行为方式:

  1. 检查用户是否通过--username和/或--password命令选项指定了任何凭证信息,如果没有,或者这些选项没有认证成功,然后

  2. 查找运行中的auth/区域保存的服务器域信息,来确定用户是否已经有了恰当的认证缓存,如果没有,或者缓存凭证认证失败,然后

  3. 提示用户输入。

如果客户端通过以上的任何一种方式成功认证,它会尝试在磁盘缓存凭证(除非用户已经关闭了这种行为方式,在前面提到过。)

分享到:
评论

相关推荐

    subversion 1.78客户端+服务端+源码

    - 改进的冲突处理:Subversion 1.7增强了冲突检测和解决机制,使用户更容易理解并解决合并时的冲突问题。 - 更好的URL引用:支持相对URL,使得在仓库内部链接更加方便。 - 客户端缓存增强:客户端缓存了更多元数据,...

    使用Subversion进行版本控制(针对 Subversion 1.4)

    Subversion 命令行客户端:svn svn选项 svn子命令 svnadmin svnadmin选项 svnadmin子命令 svnlook svnlook选项 svnlook子命令 svnsync svnsync选项 svnsync子命令 svnserve svnserve选项 svnversion mod_dav_...

    subversion-1.8.11

    - 客户端缓存增强:客户端可以更智能地缓存数据,减少对服务器的请求,提高效率。 3. 使用Subversion: - 安装与配置:Subversion可以通过编译源代码或安装预编译的二进制包进行安装。配置包括设置仓库路径、用户...

    subversion中文手册svn-book

    - **客户端凭证缓存**:存储认证信息以简化后续操作。 #### 五、分支与合并 - **什么是分支**:创建独立的开发线,用于实验新功能或修复错误。 - **使用分支**: - **创建分支**:从主干分离出一份副本。 - **在...

    subversion安装和配置

    - **realm = yxv3**:客户端凭证缓存域。 - **passwd**:定义用户信息及其密码。 - **authz**:定义授权信息,包括组和权限设置。 #### 五、创建及启动SVN服务 在命令行中执行以下命令来创建SVN服务: ```bash sc ...

    svn认证失败,用户名密码修改巧方法

    在使用Subversion(SVN)进行版本控制时,有时用户可能会遇到“svn认证失败”的问题。这通常是由于输入了错误的用户名或密码,或者SVN客户端缓存的凭证已过期或不再有效导致的。本篇文章将深入探讨这个问题,并提供...

    Subversion服务器端安装及配置手册_windowsXP

    - `realm = DB1`:设置客户端凭证缓存。 3. **用户密码文件配置**:编辑`C:\svnDB\DB1\conf\passwd`文件,增加用户信息。 4. **授权文件配置**:编辑`C:\svnDB\DB1\conf\authz`文件,配置授权规则。 #### 五、...

    查看svn保存的密码(软件)

    `config`文件包含了全局SVN配置,而`auth`文件夹下则保存了认证信息。 为了查看保存的密码,我们可以使用SVN内置的命令行工具`svn config`,或者借助第三方软件。描述中提到的“查看svn保存的密码(软件)”可能是指...

    subversion+apache

    5. **错误处理与日志记录**:Apache的日志记录功能可以帮助监控和调试Subversion的运行情况,及时发现并解决问题。 总之,"Subversion+Apache"组合提供了强大且灵活的代码版本管理解决方案,适用于企业级的软件开发...

    TortoiseSVN客户端配置及如何更改用户登录标识

    TortoiseSVN是一款在Windows环境下非常流行的Subversion(SVN)版本控制系统客户端。它提供了图形化的用户界面,使得用户可以方便地进行版本控制操作,包括但不限于提交、更新、查看历史、解决冲突等。在某些情况下...

    SVN客户端与服务端 win

    SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。它允许团队成员协同工作,记录每次更改,以便于回溯、合并和恢复错误。在这个压缩包中,我们有两个主要的组件:TortoiseSVN客户端...

    svn账号密码找回,本地svn账户查看

    4. **检查认证缓存**: 在`~/.subversion/auth`或`%APPDATA%\Subversion\auth`目录下,你可以看到所有已存储的认证信息。但请注意,这些信息通常以加密形式存储,直接查看可能无法辨认。 总结,找回SVN账号密码和...

    SVN各种错误提示产生原因及处理方法大全

    - **升级客户端**:升级本地的Subversion客户端软件到1.5.0或以上版本。 - **检查依赖库**:确保所有相关的依赖库也是最新版本。 #### 6. 工作副本格式不兼容 **问题描述:** SVN命令提示:“svn:此客户端对于工作...

    SVN使用手册中文版快速入门

    跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么...

    svnbook-1.4-final-zh(for Subversion 1.4 中文版).pdf

    - Subversion的历史始于2000年,旨在改进CVS等早期版本控制系统存在的问题。 - **主要特性:** - **版本控制能力**:支持细粒度的版本控制,确保每一项更改都被追踪。 - **高效的存储机制**:利用更高效的数据...

    SVN使用手册中文版.chm

    跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么...

    svn服务器和客户端安装包以及配置

    - **性能优化**:根据网络环境和服务器配置,可能需要调整SVN的缓存大小、并发连接数等参数。 - **钩子脚本**:SVN服务器支持预提交和后提交的钩子脚本,可以用来执行自动化任务,如代码质量检查、自动部署等。 ...

    svn客户端与服务器 1.8.10

    SVN,全称为Subversion,是一种广泛使用的版本控制系统,用于管理软件项目的源代码和其他文件的变更历史。在“svn客户端与服务器 1.8.10”中,我们主要讨论的是SVN的第1.8.10版本的客户端和服务器组件。 1. SVN...

    svnbook-1.5-final-zh(for Subversion 1.5 中文版).pdf

    - **网络模型**:客户端与服务器之间的通信模型,包括请求和响应、凭证缓存等。 #### 五、分支与合并 - **分支**: - 分支的概念及其用途。 - 创建分支、在分支上工作等操作。 - 关键概念,如变更集、保持分支...

Global site tag (gtag.js) - Google Analytics