让 Sympa 使用另一个数据库和表结构来验证用户

让 Sympa 使用另一个数据库和表结构来验证用户

我们希望使用其他系统的用户表将 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>

相关内容