svn 集成 redmine 帳戶驗證的終極解決方案

svn 集成 redmine 帳戶驗證的終極解決方案

賴勇浩( http://laiyonghao.com

動機

對於大部分開發團隊來講,通常都須要一套 SCM 系統,一般是 svn + redmine,有些還會有 reviewboard 之類的。html

你們固然不但願上三套系統就有三套帳號密碼,那樣記憶起來太麻煩了,因此你們都但願有統一的驗證方案,固然,LDAP 是一種選擇,考慮到它部署起來比較難,成本比較高,通常會選擇統一使用其中某一個系統的帳戶驗證。mysql

redmine 是沒有辦法使用 svn 的帳戶驗證的,因此你們只好選擇 svn 使用 redmine 的帳戶驗證。可是新版本 redmine 使用了 salt 字段加密,又是 sha1 算法計算 hMAC,因此 mod_auth_mysql 就掛了。網上可以搜索到的通常有如下幾個方案:git

1. 給 mod_auth_mysql 打補丁,見:http://www.redmine.org/boards/2/topics/24386?r=39269 。這個補丁在 Ubuntu Server 10.04 個工做得很好,但在 12.04 就不行了。github

2. 改 redmine 的代碼,把 salt 機制幹掉,見: http://www.jiongsun.com/tag/mod_auth_mysql 。通常人不會選擇這種不能升級 redmine 的方案。

3. 給 mod_auth_pgsql2 打補丁,再改 redmine 代碼,見:http://digzhu.com/redmine+postgresql+svn%20%E5%AE%9E%E7%8E%B0%E7%BB%9F%E4%B8%80%E7%94%A8%E6%88%B7%E7%AE%A1%E7%90%86.html 。一種讓人蛋碎的方案。算法

顯然,須要一個不須要改代碼的終極解決方案。sql

另,由於提供了 hook 機制,reviewboard 使用 redmine 的帳戶驗證卻是容易。數據庫

redmine-auth

redmine-auth 利用了 apache2 中提供的 AuthProvider 特性和 mod_wsgi WSGIAuthUserScript 特性,編寫了一個讀取 redmine 帳戶信息的腳本,實現帳戶驗證。apache

得益於 redmine-auth 使用了 sqlalchemy(從 0.2 版本開始),只要 sqlalchemy 支持的數據庫,redmine-auth 均可以讀取。因此不管 redmine 使用的是 MySQL 仍是 postgresql,甚至是 oracle/mssql/sqlite,均可以無縫地使用 redmine-auth 進行帳戶驗證。小程序

安裝

很簡單,運行使用:

pip install -U redmine-auth

它會自動安裝依賴的程序庫,可是數據庫驅動須要你手動安裝,好比 MySQLdb 須要你自行安裝好。oracle

配置

redmine-auth 提供了一個小程序用以生成 wsgi 驗證腳本,運行命令:
redmine-auth -g /opt/redmine_auth.wsgi
回頭幾個關於 redmine 使用的數據庫相關的問題,一個能夠運行的 wsgi 腳本就生成到指定的位置了。
而後配置一下你的 apache2 site config 文件。讓它看起來像這樣:
<VirtualHost *:1081>


<Location />
  DAV svn
  SVNParentPath /opt/svn


  AuthName "Subversion repository"
  AuthType Basic


  AuthBasicProvider wsgi
  WSGIAuthUserScript /opt/redmine_auth.wsgi


  AuthzSVNAccessFile /opt/svn-authz


  Require valid-user


</Location>


</VirtualHost>

其中最重要的是下面這兩行:

  AuthBasicProvider wsgi
  WSGIAuthUserScript /opt/redmine_auth.wsgi

而後重啓你的 apache2 就能夠了。

其它

redmine-auth 是一個 MIT 受權的開源項目,主頁: https://github.com/laiyonghao/redmine-auth
相關文章
相關標籤/搜索