2011-10-21 62 views
15

我正在研究在Django部署中使用Shibboleth的選項。從我發現的事情看,事情看起來有點稀疏。任何人都可以評論以下內容嗎?Django和Shibboleth

  • 是否有人使用django_shibboleth模塊(請參閱http://code.arcs.org.au/gitorious/django/django-shibboleth/trees/1.1)?如果是這樣,你對這個模塊有什麼經驗?

  • Django(例如,django-saml2-sp)和一般Python(例如pysaml2)的SAML 2實現看起來有點實驗性,並且包含很少的文檔。有誰知道穩定的Django/Python的SAML 2解決方案嗎?

在此先感謝您的幫助!

+0

你需要什麼功能?你只能對一個IdP進行身份驗證,還是需要DS,WAYF,聯邦,工件解析,註銷等? – JimB

+0

優秀的問題!這個特定的項目將需要DS,WAYF等。 – user1007116

+0

特別是如果您要使用的不僅僅是基本的SAML功能,我會堅持我的答案的第一部分,並且同意@hrnt。結合shibboleth本地SP將是最可靠的路線。 – JimB

回答

3

雖然我沒有使用Django + Shibboleth的經驗,但我有一些與「平原」Shibboleth。

如果你的Apache已經正確配置了mod_shibboleth,那麼把它與一個web應用程序集成起來就相對簡單了。查看django_shibboleth模塊,你可以看到它不包含那麼多的代碼。

特別是,如果您已經運行了mod_shibboleth,請不要使用第三方SAML 2庫。這些帶來了很多不必要的複雜性。

9

我會推薦使用Shibboleth Native SP(apache mod_shib)。它經過了很好的測試,擁有龐大的用戶羣,而且非常穩定。

我快速瀏覽了django_shibboleth模塊,看起來它依賴於mod_shib,並且它自己不執行任何SAML。在這方面,該模塊非常簡單,可能效果很好。

我還沒有看到任何完整的(或大部分完整的)python SAML2實現,並且沒有任何活動項目。 xml安全性和加密要求是python的一大難題,這可能會導致缺乏庫。

[編輯 - 我會recant的一部分] pysaml2庫有一些發展活動,並從粗略的目光看起來相當完整。它直接使用xmlsec1二進制進行簽名和加密,因此不依賴任何過時的綁定。這可能是您在python中直接使用SAML2的最佳選擇。

1

django-shibboleth模塊可用於從IdP獲取屬性並將它們映射到Django認證系統中的用戶。大部分工作是由Shibboleth本身完成的,只需要少量代碼進行映射。

包裝可從這裏。

linuxsoft.cern.ch/internal/repos/ai6-stable/x86_64/os/Packages/django-shibsso-0.1-1.noarch.rpm

或從這裏來源。

linuxsoft.cern.ch/internal/repos/ai6-stable/source/SRPMS/django-shibsso-0.1-1.src.rpm

按照有關設置本地的Shibboleth服務提供商的Shibboleth的指令( SP)與IdP一起使用。

在http.conf文件或您自己在conf中的應用程序配置。d,創建以下條目。

<Location /shibboleth> 
    AuthType shibboleth 
    ShibRequireSession On 
    ShibUseHeaders On 
    require valid-user 
</Location> 

這應該會導致/ shibboleth的URL被定向到IdP登錄頁面。成功登錄後,將返回一個404頁面。

添加配置,將應用替換爲應用的名稱。

<Location "/"> 
    SetHandler mod_python 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE app.settings 
    PythonDebug Off 
</Location> 

這會在通過/ shibboleth URL登錄後導致以下錯誤。 當前URL Shibboleth.sso/ADFS與其中任何一個都不匹配。

要解決此問題,您需要將以下內容添加到配置中。

<Location /Shibboleth.sso> 
    SetHandler None 
</Location> 

/var/log/shibboleth/transaction.log應該告訴你什麼屬性被釋放。

+0

而不是在「/Shibboleth.sso」上設置SetHandler None,重新安排Apache加載模塊的方式也會有所幫助。我碰到類似的情況,mod_passenger + mod_shib2。例如,如果在* mod_passenger之後加載了mod_shib2 *,那麼「/Shibboleth.sso」位置由Passenger應用程序處理(這不是期望的行爲)。如果mod_shib2在* mod_passenger之前加載,則一切按預期工作。 –