我们希望使用其他系统的用户表将 Sympa 的 Web 界面与使用 MySQL 的另一个系统集成。
我做了一些搜索,但由于 Sympa 记录不全,因此没有出现相关结果。
这可能吗?
答案1
Sympa 身份验证由文件配置auth.conf
。该文件可以包含一个或多个定义替代身份验证方法的节,例如内部数据库、LDAP、cas 或 generic_sso。Sysmpa 通过电子邮件地址识别用户。
前两种(内部和 LDAP)采用用户电子邮件地址和密码,并直接进行身份验证。CAS 身份验证使用 CAS 服务。
Generic_sso 身份验证使用 Web 服务器自己的身份验证来返回用户 ID,然后从元数据或通过 LDAP 查找获取用户电子邮件地址。一个示例是使用 Shibboleth(通过 mod_shib)并从 Shibboleth 元数据中提取电子邮件地址。但是,可以使用任何 Web 服务器身份验证,因此您可以轻松使用 mod_mysql 或类似程序对外部用户数据库进行身份验证。为了获取电子邮件地址,您可以使用关联的 LDAP 查找,让您的 Web 服务器身份验证模块返回元数据(作为 HTTP 标头),或者确保经过身份验证的用户 ID 与电子邮件地址相同。
简而言之,使用 generic_sso,然后在您的 Web 服务器中配置必要的身份验证,如果您无法通过 LDAP 查找将用户映射到电子邮件,请确保在元数据中返回电子邮件地址。
有关此问题的(确实很差的)文档如下:Sympa 身份验证
例子:
此auth.conf
节用于mod_shib
通过 Shibboleth 进行身份验证;如果mail
返回了元数据,则将使用它,否则将执行 LDAP 查找以获取电子邮件地址。为了使身份验证正常工作,/sympa/sso_login/shibboleth
在 Web 服务器中配置位置以使用 Shibboleth 进行保护mod_shib
。
generic_sso
service_name Shibboleth
service_id shibboleth
http_header_list mail,displayName,uid,unscoped_affiliation
netid_http_header uid
email_http_header mail
ldap_host ldap.company.com:636
ldap_timeout 20
ldap_bind_dn cn=sympa,o=company
ldap_bind_password xxxxxx
ldap_suffix ou=users,o=company
ldap_get_email_by_uid_filter (cn=[uid])
ldap_email_attribute mail
ldap_scope one
ldap_use_ssl 1
例子:
可以使用类似的方法通过不同的方法(例如mod_auth_mysql
或 )来保护位置mod_authn_dbd
。如果使用mod_authn_dbd
,则可以在同一查询中返回电子邮件地址,然后将其加载到环境中。然后,您可以RequestHeader set
在 Apache 配置中使用 将其推送到 HTTP 标头中,以供定义拾取email_http_header
。请参阅这里用于mod_authn_dbd
文档。
generic_sso
service_name MySQL
service_id mysql
email_http_header x-mail
在 Apache 中(这没有经过测试,但应该是正确的):
DBDriver mysql
DBDParams "dbname=apacheauth user=apache password=xxxxxx"
DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300
<Location /sympa/sso_login/mysql>
AuthType basic
AuthBasicProvider dbd
Require valid-user
AuthDBDUserPWQuery "SELECT password, emailaddr FROM authn WHERE user = %s"
RequestHeader set x-mail %{AUTHENTICATE_emailaddr}e
</Location>