>Apache 2.4 作为带有模块 mod_authnz_sspi 的反向代理。
必须设置一些 RequestHeaders,以下是 httpd.conf 的相关部分:
<Location />
AuthBasicAuthoritative Off
AuthLDAPBindAuthoritative On
AuthBasicProvider ldap
LDAPReferrals Off
AuthLDAPMaxSubGroupDepth 2
AuthLDAPRemoteUserAttribute sAMAccountName
AuthLDAPURL "ldap://lan.domain.de:389/DC=lan,DC=domain,DC=de?sAMAccountName,memberOf,mail,displayName"
AuthLDAPBindDN someuser
AuthLDAPBindPassword somepasswd
#Require ldap-group CN=Users,DC=lan,DC=domain,DC=de
Require ldap-attribute ObjectClass="person"
AuthLDAPGroupAttributeIsDN off
AuthType SSPI
AuthName "Sonar"
SSPIAuth On
SSPIOfferSSPI On
SSPIAuthoritative On
SSPIDomain LAN
SSPIOmitDomain On
SSPIPackage Negotiate
Require valid-sspi-user
</Location>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "E:/Apache/conf/ssl/server.cer"
SSLCertificateKeyFile "E:/Apache/conf/ssl/server.key"
SSLCACertificateFile "E:/Apache/conf/ssl/ca-bundle.crt"
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Login %{AUTHORIZE_sAMAccountName}e
RequestHeader set X-Forwarded-Groups %{AUTHORIZE_memberof}e
RequestHeader set X-Forwarded-Email %{AUTHORIZE_mail}e
RequestHeader set X-Forwarded-Name %{AUTHORIZE_displayName}e
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
ServerName SomeServer
问题是,这些组以";"分隔的DN的形式出现,不知道另一种方法可以将用户的组作为"成员">
CN=Group1,OU=someou,OU=someotherou,DC=lan,DC=domain,DC=de;CN=Group2,OU=someou,OU=someotherou,DC=lan,DC=domain,DC=de;...
但是应用程序需要那些组中的CN以","分隔,在该示例中将是组1,组2 - 如何实现?
在 ldap URL 中使用过滤器或子表达式是否有任何可能性?
是否可以相应地重写 X 转发组?
找到了mod_headers的解决方案,并将其发布给遇到相同问题的其他用户。
httpd.conf
LoadModule headers_module modules/mod_headers.so
[...]
RequestHeader set X-Forwarded-Groups %{AUTHORIZE_memberof}e
RequestHeader edit* X-Forwarded-Groups CN=([^,]+),[^;]+ $1
RequestHeader edit* X-Forwarded-Groups ; ,
edit* 与正则表达式和 $1 表示 CN=... 的所有匹配项;应替换为 CN 的值。
在第二次编辑*中,分隔符";"替换为",">
现在就像一个魅力。