GNU Health/中央认证
对于大型的、分布式的 GNU Health 安装,例如公共医院网络,您可能需要考虑采用中央用户认证模型。
在这种方法下,用户及其登录凭据在中央进行管理,因此可以方便地在需要时创建、修改和/或撤销它们。
GNU Health 中的中央认证模型非常灵活,允许每个医疗机构拥有不同的角色。例如,一名医护人员可以在两个不同的医疗中心工作。Cameron Cordara 医生上午在GNU SOLIDARIO 医院担任家庭医生,下午与社会工作者合作,在当地基层医疗机构会见社区。两个中心两个不同的角色,但只有一人,一个登录。
注意:本文档基于FreeBSD和OpenLDAP下的安装,但它也应该在其他 Free/Libre 操作系统上运行良好,例如GNU/Linux。还有许多配置和部署选项,例如公钥基础设施 (PKI)、LDAP 复制等,在本入门性概念文档中未涵盖。
- OpenLDAP 服务器 (slapd)
- Tryton 服务器模块:trytond_ldap_authentication
- 医护人员在登录提示符处输入用户名/密码。
- 凭据在 OpenLDAP 服务器上进行检查。
- 场景 1:用户存在于 OpenLDAP 数据库中。如果提供的密码正确,则用户将使用其本地授权配置文件登录。如果用户输入了错误的密码,则会再次出现登录提示符。
- 场景 2:用户不存在于 OpenLDAP 数据库中。凭据在医疗机构的本地 GNU Health 数据库中进行检查。
- 场景 3:OpenLDAP 服务器无法访问(网络故障、服务器宕机等)。与场景 2 相同的规则适用。
安装 OpenLDAP 后,您需要创建组织、角色和用户,以便 LDAP 客户端和 GNU Health 可以与服务器交互。
以下LDIF 文件用于创建基本组织和用户,仅用于演示目的。
示例 LDIF 文件
# The GNU Health Organization
dn: dc=gnuhealth,dc=org
objectclass: dcObject
objectclass: organization
o: GNU Health Nation
dc: gnuhealth
dn: cn=Manager,dc=gnuhealth,dc=org
objectclass: organizationalRole
cn: Manager
# PEOPLE Organizational UNIT (first level hierchy)
dn: ou=people, dc=gnuhealth,dc=org
ou: people
description: All people in organisation
objectclass: organizationalunit
# Actual users
dn: cn=Cameron Cordara,ou=People,dc=gnuhealth,dc=org
objectClass: inetorgperson
cn: Cameron Cordara
sn: Cordara
uid: cameroncordara
userPassword: SecretPass
您现在可以上传您新创建的 LDIF 文件,以填充初始 OpenLDAP 数据库,例如
$ slapadd -l <your_ldif_file>
配置完 OpenLDAP 服务器并创建用户后,您需要配置 GNU Health Tryton 实例以与其通信。
- 安装以下 Tryton 模块
- trytond_ldap-authentication
- 创建新的 LDAP 连接(管理 → LDAP → 连接)
- 填写信息以满足您的 LDAP 服务器规范。
- 保存连接
- 在 GNU Health 中创建用户(管理 → 用户 → 用户)
您现在可以创建一个与 LDIF 文件中的 uid 匹配的用户,并为其分配本地角色。在这种情况下,我们将屏幕上的“登录”名称与组织中用户的 uid 匹配。对于 Cameron Cordara 医生,登录名称将是cameroncordara。同样,这只是为了演示目的。在现实场景中,您将使用唯一的标识符作为登录名称。
注意:您会注意到密码字段已被“填充”。这是因为实际的用户密码现在存储在 LDAP 服务器中,而不是您的本地实例数据库中。
如果一切顺利,您现在已经为中央认证启用了 GNU Health。尝试以“cameroncordara”身份登录。她的凭据将在 LDAP 服务器上进行检查。