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

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

賴勇浩(http://laiyonghao.com

動機

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

大家當然不希望上三套系統就有三套賬號密碼,那樣記憶起來太麻煩了,所以大家都希望有統一的驗證方案,當然,LDAP 是一種選擇,考慮到它部署起來比較難,成本比較高,一般會選擇統一使用其中某一個系統的賬戶驗證。

redmine 是沒有辦法使用 svn 的賬戶驗證的,所以大家只好選擇 svn 使用 redmine 的賬戶驗證。但是新版本 redmine 使用了 salt 字段加密,又是 sha1 算法計算 hMAC,所以 mod_auth_mysql 就掛了。網上能夠搜索到的一般有以下幾個方案:

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

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 。一種讓人蛋碎的方案。

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

另,因爲提供了 hook 機制,reviewboard 使用 redmine 的賬戶驗證倒是容易。

redmine-auth

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

得益於 redmine-auth 使用了 sqlalchemy(從 0.2 版本開始),只要 sqlalchemy 支持的數據庫,redmine-auth 都可以讀取。所以無論 redmine 使用的是 MySQL 還是 postgresql,甚至是 oracle/mssql/sqlite,都可以無縫地使用 redmine-auth 進行賬戶驗證。

安裝

很簡單,運行使用:

pip install -U redmine-auth

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

配置

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
發佈了211 篇原創文章 · 獲贊 640 · 訪問量 364萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章