2011-10-21 29 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之前加载,则一切按预期工作。 –