利用Apache与mod_wsgi 实现svn 动态权限鉴定(二)

来源:互联网 发布:国产采精小蝴蝶知乎 编辑:程序博客网 时间:2024/05/02 04:40

前面已经写到可以通过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客户端登录成功了,但是他没有写入权限,只要他上传一个文件的时候就直接返回一个错误或者提示给用户,而不是弹出一个用户登录框出来。





0 0
原创粉丝点击