我正在为一个用Django编写的应用程序开发一个中央登录系统,它有一个MediaWiki维基和一个Roundup bugtracker。目前,我正在考虑的方法是使用Mediawiki (https://bitbucket.org/toml/django-mediawiki-authentication/src)的AuthDjango扩展,并为Roundup添加一些类似的东西。该方法依赖于Django中SessionProfile模型的创建,该模型将会话in (取自cookies)映射到用户实例,并且MediaWiki/Roundup通过直接查询Django数据库来访问数据。
这样做的好处是,所有三个应用程序的登录、会话和注销过程都很容易统一。然而,我遇到的问题是,它依赖于MediaWiki/Roundup存储了Django数据库的凭据,并且访问MediaWiki或Roundup shell帐户的要求故意没有Django主应用程序严格(目前只有一个人拥有Django生产访问权限)。因此,MediaWiki/Roundup实例的管理员(即具有shell访问权限)或任何通过远程利用漏洞入侵的人,都有可能劫持主站点上的用户帐户。
所以我的问题是:有没有人知道更好的方法来集成这些系统的登录机制?或者,我如何才能让MediaWiki/Roundup安全地访问Django数据库,同时最小化访问MediaWiki外壳的人滥用的可能性?
发布于 2011-02-04 07:46:47
您可以使用Django创建一个(JSON/XML/任何东西) web服务来仅执行您需要的操作-登录、查询会话有效性和用户、注销,而不是提供直接的DB访问。这样,只有Django才能编辑数据库中的数据。
然后Mediawiki和Roundup将通过HTTP(S)调用连接到您的Django应用程序(您可以锁定该应用程序,例如,如果所有3个应用程序都在同一服务器上运行,则只能在内部访问),以检查哪个用户与特定会话相关联。
更好的是,将用户重定向到Django应用程序以执行登录和注销功能;这样Mediawiki和Roundup将根本无法访问用户凭据-它们只能在提供有效会话ID的情况下检索用户信息。
https://stackoverflow.com/questions/4892898
复制相似问题