openSUSE:构建服务概念用户数据
openSUSE基础设施由多个或多或少独立的Web应用程序和服务组成。有些规模庞大,例如构建服务API,而另一些则相当特殊和小型,例如Hermes的星舰。它们使用数据库来存储数据。
它们共同的特点是它们都处理用户数据。 在本次讨论中,需要区分两种不同类型的用户相关信息
- 通用用户信息,例如姓名、电子邮件、openSUSE成员状态等。
- 与帐户相关的特定于应用程序的数据,例如用户维护哪些软件包,或者某人希望以何种方式接收Hermes通知的信息。
不适用的是每个应用程序都有自己的代码来检查用户帐户、提供登录表单、更改姓名或电子邮件等。
目前我们在此方面的情况不太理想。大多数应用程序仍然有太多的自定义代码。这在单点登录体验方面造成了障碍。此外,我们还拥有 http://users.opensuse.org,这是一个应该作为用户管理子系统的子系统。
我们与一些极客进行了一次很好的会议来讨论这个问题。本文总结了我们的成果。
iChain
在当前的openSUSE基础设施中,我们使用iChain作为身份验证系统。从应用程序的角度来看,iChain代理工作模式非常智能:应用程序不必处理密码和登录表单,而是可以依赖于包含帐户名的HTTP标头。由于特殊的配置,应用程序可以依赖于帐户的存在、已通过身份验证且有效。
这意味着通常应用程序会获得一个包含已登录用户名的字符串。此帐户名是通用的密钥,iChain保证名称的唯一性。
通用用户数据
对于通用用户相关数据,例如姓名、电子邮件、Jabber ID等,决定在 http://user.opensuse.org 的数据库中维护它们。users还提供接口来维护这些数据。
特定于应用程序的数据
更专业化的数据,仅对单个子系统感兴趣,将在子系统的责任范围内存储和编辑。例如,Hermes必须为用户订阅通知提供编辑界面。用于存储数据的密钥是由iChain提供的iChain帐户名。
用户数据Web服务
为了为所有应用程序提供通用的用户数据,users.opensuse.org实现了一种如下形式的Web服务
GET http://users.opensuse.org/user/<username>
可以指定返回格式,例如text/xml或json。
当然,此服务不向公众开放,并且将首次通过iChain设置进行保护。 后来,有人建议使用 进行跨应用程序身份验证,需要进一步调查。
Rails应用程序身份验证库
当前状态是,对于各种openSUSE rails应用程序,没有通用的代码库来使用iChain或其他方法进行身份验证。 这段代码很少,因此大多数应用程序都自行实现了它。 当然,这容易出错且不灵活,需要更改。
决定将此代码放入常用的代码库中。 该库将提供以下功能
- 从HTTP标头中提取用户令牌
- 为开发设置提供iChain身份验证类型的测试能力(欺骗帐户)
- 易于插件其他身份验证类型,例如基本身份验证和LDAP
正在调查该库是否可以封装从users.opensuse.org获取用户信息并相应地提供模型。