前面已经写到可以通过wsgi 可以实现动态的svn密码鉴定,但是还不够,因为svn还要组的概念在里面,
原先通过django手册和mod_wsgi手册里面的配置:
https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/apache-auth/
https://modwsgi.readthedocs.io/en/develop/user-guides/access-control-mechanisms.html#http-user-authentication
发现 WSGIAuthGroupScript 这个配置根本就不起作用,经过反复测试还是没有去执行里面的脚本
这个是我的配置:
<Location /> DAV svn SVNParentPath /var/svn/repos AuthType Basic AuthName "Authorization SVN" AuthBasicProvider wsgi WSGIAuthUserScript /var/www/auth.wsgi WSGIAuthGroupScript /var/www/auth.wsgi Require group secret-agents Require valid-user </Location>
发现根据手册里面说group这个配置会执行一个 groups_for_user
的方法,但是在去svn客户端请求的时候,groups_for_user 这个方法根本就没有执行,
百度和谷歌上面也是没有一点资料
最终在无意间看到了git上面的一个issue 才发现原来
https://github.com/GrahamDumpleton/mod_wsgi/issues/25
在配置还需要加上
Require wsgi-group secret-agents
而我前面一直是
Require group secret-agents
所以Apache根本就不会去执行 WSGIAuthGroupScript 上面配置脚本
总结下:
官方手册上如果有坑,真是会害死人啊!~~
目前还有一个问题:
虽然已经可以动态对svn的账户进行动态鉴权,在根据手册上面所述的,wsgi会去运行check_password和groups_for_user这两个方法但是,他们返回的都只是一个是True或者False 一个是groups的一个数组,而wsgi获取到这两个返回值如果不符合条件就会直接返回给svn客户端,svn客户端会马上弹出一个basic认证的窗口让用户再填写账户密码,这样就很影响用户体验的,不知道是否有大虾能够熟悉wsgi机制以及wsgi auth权限鉴定的,能来解决我的问题:只要用户再svn客户端登录成功了,但是他没有写入权限,只要他上传一个文件的时候就直接返回一个错误或者提示给用户,而不是弹出一个用户登录框出来。
本文介绍了解决SVN动态鉴权过程中遇到的问题,包括如何正确配置Apache以使用WSGI进行用户验证和组验证,并分享了一个常见配置误区及其解决方案。
508

被折叠的 条评论
为什么被折叠?



