3

我正在为一个用 Django 编写的应用程序开发一个中央登录系统,它带有一个 MediaWiki wiki 和一个 Roundup bugtracker。目前,我正在考虑使用的方法是使用 Mediawiki 的 AuthDjango 扩展(https://bitbucket.org/toml/django-mediawiki-authentication/src)并为 Roundup 破解类似的东西。此方法依赖于在 Django 中创建 SessionProfile 模型,该模型将会话 ID(取自 cookie)映射到 User 实例,MediaWiki/Roundup 通过直接查询 Django 数据库来访问数据。

这样做的好处是所有三个应用程序的登录、会话和注销过程很容易统一。但是,我遇到的问题是它依赖于 MediaWiki/Roundup 存储了 Django 数据库的凭据,并且访问 MediaWiki 或 Roundup shell 帐户的要求故意不如主 Django 应用程序严格(目前只有一个人具有 Django 生产访问权限)。因此,MediaWiki/Roundup 实例的管理员(即具有 shell 访问权限)或任何通过远程漏洞入侵的人都可能能够劫持主站点上的用户帐户。

所以我的问题是:有人知道整合这些系统登录机制的更好方法吗?或者,我如何能够让 MediaWiki/Roundup 安全地访问 Django 数据库,同时最大限度地减少有权访问 MediaWiki shell 的人滥用的可能性?

4

1 回答 1

2

您可以使用 Django 创建(JSON/XML/whatever)Web 服务来仅执行您需要的操作——登录、查询会话有效性和用户、注销,而不是提供直接的 DB 访问。这样只有 Django 有能力编辑数据库中的数据。

然后,Mediawiki 和 Roundup 将通过 HTTP(S) 调用连接到您的 Django 应用程序(您可以锁定它,例如,如果所有 3 个应用程序都在同一服务器上运行,它只能在内部访问),以检查哪个用户与特定的会话。

更好的是,将用户重定向到 Django 应用程序以执行登录和注销功能;这样,Mediawiki 和 Roundup 将根本无法访问用户凭据——它们只能在提供有效会话 ID 的情况下检索用户信息。

于 2011-02-03T23:46:46.733 回答