SVN Active Directory 身份验证与 ProxyPass 重定向相结合

SVN Active Directory 身份验证与 ProxyPass 重定向相结合

我们在 Windows 机器上运行了一个 BitNami SVN 堆栈,其中包含我们的 SVN 存储库。它设置为针对我们的 AD 服务器进行身份验证,并使用 authz 来控制权限。

我们需要能够通过网络浏览器访问它http://[域名]/svn。域名指向我们正在退役的 Linux 环境,但在此之前,该机器上的其他系统会阻止我们重新指向域记录。

目前,我们在 Linux 机器上有一个 ProxyPass 记录,用于将请求转发到http://[机器名称]/svn - 它似乎工作正常,并且端点机器要求提供凭据,然后进行身份验证:但是当发生这种情况时,访问尝试被记录为来自linux机器,而不是来自已经通过身份验证的用户。

这几乎就像是凭证的某些元素没有传递到端点机器。

有人以前做过这样的事情吗,或者我可以提供其他信息来尝试理解这个问题并找出解决方法吗?

谢谢你!

将尝试以不同的方式解释 -

域名 => A: Apache 服务器(linux)==ProxyPass==> B: Apache/SVN 服务器(windows)

Windows SVN 框中的 httpd.conf 位于此处:http://pastebin.com/Pd5zrnyQ

这里是 Linux 机器上的 apache 配置,它将对 [domain]/svn 的请求转发到 SVN 机器:

# Proxy requests to SVN over to Windows SVN server
ProxyPass /svn http://10.2.1.142/svn
<Location /svn>
  ProxyPassReverse http://10.2.1.142/svn
</Location>

如果直接访问 SVN 框,访问日志会显示:

10.2.2.89 - jason.standing [10/Dec/2012:19:04:36 +0000] "GET /svn/ HTTP/1.1" 200 361
10.2.2.89 - jason.standing [10/Dec/2012:19:04:38 +0000] "GET /svn/ HTTP/1.1" 200 361
10.2.2.89 - - [10/Dec/2012:19:04:52 +0000] "GET /svn HTTP/1.1" 401 401
10.2.2.89 - afaef [10/Dec/2012:19:04:54 +0000] "GET /svn HTTP/1.1" 401 401
10.2.2.89 - jason.standing [10/Dec/2012:19:05:02 +0000] "GET /svn HTTP/1.1" 301 225
10.2.2.89 - jason.standing [10/Dec/2012:19:05:03 +0000] "GET /svn/ HTTP/1.1" 200 361

如果您通过域名访问它(从而转发),您将获得:

10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "OPTIONS /svn/Product/_Installers HTTP/1.1" 200 183
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/Product/_Installers HTTP/1.1" 207 704
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/Product/_Installers HTTP/1.1" 207 704
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/!svn/vcc/default HTTP/1.1" 207 392
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "PROPFIND /svn/!svn/bln/10024 HTTP/1.1" 207 451
10.2.1.252 - ukdevservice [10/Dec/2012:19:04:32 +0000] "REPORT /svn/!svn/vcc/default HTTP/1.1" 200 256

在这两种情况下,您都必须使用用户名和密码进行身份验证才能访问网站,但是后一种情况下,凭据似乎被更改了,并且明显的 SVN 用户是具有提升权限的人。我们不希望出现这种情况。

答案1

我不清楚您认为这里的问题是什么,或者更确切地说,您希望发生什么与您描述的不同的事情。

如果您希望记录原始 SVN 客户端的 IP 地址,而不是代理服务器,我在 Google 搜索中找到了以下可能性:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy

SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "logs/access_log" combined env=!forwarded
CustomLog "logs/access_log" proxy env=forwarded

基本上,这里会发生的情况是,如果设置了 X-Forwarded-For HTTP 标头(设置为 IP 地址,如果曾经设置过的话),则在日志中使用该 IP 地址,而不是默认地址。

答案2

最好能从 windows 服务器和 linux 服务器获取经过身份验证的请求的网络捕获(例如 Wireshark)。Wireshark 用于 windows,tcpdump 用于 linux。

看起来<Location '/svn'>正在使用Basicauthn,因此用户名应该在Authorization标题中(参见http://en.wikipedia.org/wiki/Basic_access_authentication) 而应该由前端 linux 盲目地传递ProxyPass

ssi.conf 中有什么?

相关内容