kannengi
Elite Observer

LDAP-Gruppenmodul: DN ohne USER_LOGIN

Jump to solution

Hallo Community,

ich habe folgenden use case, für den ich keine Lösung finden kann:

Ich benutze das Modul FS-Personalisation mit Kerberos Login-Modul.

Jetzt will ich eine Seite nur für Angehörige einer bestimmten Gruppe zugänglich machen.

Ich hätte gern das LDAP Gruppen-Modul benutzt, um die Gruppenzugehörigkeit aus dem Active Directory auszulesen, das auch in die Kerberos-Authentifizierung eingebunden ist.

Zur Konfiguration des LDAP Gruppen-Moduls muss ich unter anderem einen "Benutzer DN" der Form

"cn=$USER_LOGIN$,cn=Recipients,ou=E-SPIRIT,o=e-Spirit" angeben.

Jetzt ist es aber leider so, dass  in der gegeben LDAP (Active Directory) Struktur der login Name nicht im Distinguished Name enthalten ist,

sondern als separates Attribute gehalten wird (userPrincipalName).

Bsp:

login name "test"

DN="cn=Hans Test,cn=Recipients,ou=E-SPIRIT,o=e-Spirit"

Wie kann ich trotzdem das Modul so konfigurieren, damit der betreffende Benutzer im LDAP gefunden wird?

Oder ist es bei gegebener LDAP Struktur einfach nicht möglich?

Danke für einen Tipp...

Benny Kannengießer

// re-lounge

0 Kudos
1 Solution

Accepted Solutions

Die XML-Datei sieht im Prinzip genau aus wie bei meiner funktionsfähigen Test-WebApp, die ich vor einigen Monaten erstellte. Sie kombiniert Kerberos mit LDAP als Fallback.

Hier die beiden Seiten der Test-WebApp. Wichtig ist der Parameter "loginPackage" bei ldap.jsp, der auf das LDAP-Loginpackage verweist und vermutlich das fsp:isNotAuthorized in index.jsp, weil ansonsten eben nur 401 dort angezeigt würde, sofern man nicht mittels des Zusatzparameters bei fsp:authorize auf eine andere Seite automatisch umleitet, was in meinem Beispiel aber nicht erfolgt.

Datei index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="FIRSTpersonalisation" prefix="fsp" %>

<html><body>

<fsp:isAuthorized groups="*">

          <fsp:userInfo>

                    <p>logged in: <%= login %></p>

          </fsp:userInfo>

          <p>Attributes:<br/>

          <fsp:userAttributes attributes="mail,displayName,telephoneNumber">

                     <%= attributename %>: <%= attributevalue %><br/>

          </fsp:userAttributes>

          <p>Groups:<br/>

          <fsp:userGroups>

                    <%= groupname %>

          </fsp:userGroups>

          </p>

          <form method="POST" action="<%= request.getContextPath() %>/do.logout">

                      <input type="hidden" name="redirect_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Logout" />

          </form>

</fsp:isAuthorized>

<fsp:isNotAuthorized groups="*">

          <p>not logged in</p>

          <form method="GET" action="ldap.jsp">

                      <input type="hidden" name="login_ok_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Login" />

          </form>

</fsp:isNotAuthorized>

</body></html>

<fsp:authorize />

Datei ldap.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="FIRSTpersonalisation" prefix="fsp" %>

<html><body>

<fsp:isAuthorized groups="*">

          <fsp:userInfo>

                    <p>already logged in: <%= login %></p>

          </fsp:userInfo>

          <form method="POST" action="<%= request.getContextPath() %>/do.logout">

                      <input type="hidden" name="redirect_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Logout" />

          </form>

</fsp:isAuthorized>

<fsp:isNotAuthorized groups="*">

          <form method="POST" action="<%= request.getContextPath() %>/do.login">

                    <p>user: <input type="text" name="login" /></p>

                      <p>password: <input type="password" name="password" /></p>

                    <input type="hidden" name="loginPackage" value="LDAP" />

                      <input type="hidden" name="login_ok_url" value="<%= request.getContextPath() %>" />

                      <input type="hidden" name="wrong_login_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Login" />

          </form>

</fsp:isNotAuthorized>

</body></html>

View solution in original post

0 Kudos
4 Replies
isenberg
I'm new here

Die übliche Lösung bei uns für den Fall ist, das Attribut-Modul zu nutzen, weil dies über den Modus "search_compare" eine Suche im LDAP-Baum bietet, die das LDAP-Groups-Modul nicht unterstützt. Das nachfolgend konfigurierte LDAP-Groups-Modul verwendet dann das durch das Attribut-Modul gefunden Benutzerobjekt im LDAP um die Gruppen auszulesen. Insgesamt ergibt sich dann folgendes WEB-INF/firstpersonalisation.xml, wenn man im FirstSpirit-ServerManager die Konfiguration über die GUI zusammenstellt:

<FIRSTPERSONALISATION>

          <LOGIN_PACKAGES>

                    <LOGIN_PACKAGE name="Kerberos" priority="0">

                              <LOGIN_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.login.KerberosLoginModule" name="Kerberos Login">

                                        <PARAMETER_ENTRY name="userAgents" value=".*" />

                                        <PARAMETER_ENTRY name="useFullPrincipal" value="false" />

                              </LOGIN_MODULE>

                              <ATTRIBUTES_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.attributes.LDAPAttributesModule" name="LDAP">

                                        <PARAMETER_ENTRY name="bind_dn" value="CN=ldaprequest,CN=Users,DC=e-spirit,DC=de" />

                                        <PARAMETER_ENTRY name="mode" value="search_compare" />

                                        <PARAMETER_ENTRY name="host_url" value="ldap://ldap1.e-spirit.de" />

                                        <PARAMETER_ENTRY name="search.base_dn" value="DC=e-spirit,DC=de" />

                                        <PARAMETER_ENTRY name="bind_password" value="ldaprequest" />

                                        <PARAMETER_ENTRY name="user_dn" value="not-used" />

                                        <PARAMETER_ENTRY name="search.filter" value="(sAMAccountName=$USER_LOGIN$)" />

                                        <PARAMETER_ENTRY name="attributes" value="mail,displayName,telephoneNumber" />

                                        <PARAMETER_ENTRY name="ssl" value="false" />

                              </ATTRIBUTES_MODULE>

                              <GROUPS_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.groups.LDAPGroupsModule" name="LDAP Group">

                                        <PARAMETER_ENTRY name="bind_dn" value="cn=ldaprequest,cn=users,dc=e-spirit,dc=de" />

                                        <PARAMETER_ENTRY name="host_url" value="ldap://ldap1.e-spirit.de" />

                                        <PARAMETER_ENTRY name="bind_password" value="ldaprequest" />

                                        <PARAMETER_ENTRY name="user_dn" value="not-used" />

                                        <PARAMETER_ENTRY name="ssl" value="false" />

                                        <PARAMETER_ENTRY name="group_attribute" value="memberOf" />

                              </GROUPS_MODULE>

                    </LOGIN_PACKAGE>

          </LOGIN_PACKAGES>

          <GLOBAL_CONFIG_PARAMETERS>

                    <PARAMETER_ENTRY name="useDummyUser" value="false" />

                    <PARAMETER_ENTRY name="activateEveryoneGroup" value="true" />

                    <PARAMETER_ENTRY name="everyoneGroupString" value="" />

                    <PARAMETER_ENTRY name="ssoCookieName" value="" />

                    <PARAMETER_ENTRY name="ssoCookieLifetime" value="" />

                    <PARAMETER_ENTRY name="ssoCookieDomain" value="" />

                    <PARAMETER_ENTRY name="log4JFallbackConfigFile" value="" />

          </GLOBAL_CONFIG_PARAMETERS>

</FIRSTPERSONALISATION>

0 Kudos

Hallo Herr Isenberg,

vielen Dank, funktioniert tipptopp!

Jetzt hätte ich noch eine Zusatzfrage:

Ich habe ein zweites Loginpackage konfiguriert (priority 1), für den Fall, dass Kerberos nicht verfügbar ist.

Dann soll ein username/password Formular kommen (RequestParameter) und mit den Eingaben gegen das LDAP authentifiziert werden.

Ich habe das LDAP-Authentifizierungsmodul genauso wie das Attribut-Modul im Kerberos-Package konfiguriert (authentication "search-bind") - aber die Authentisierung schlägt fehl (401).

Im Konfigurationsdialog der Web-Komponente funktioniert s aber mit dem Testen" Button.

Habe ich noch etwas falsch konfiguriert? Es gibt einen Parameter "fsp-authProp.properties", dessen Zweck mit nicht klar ist.

Hier meine Konfiguration:

<FIRSTPERSONALISATION>

    <LOGIN_PACKAGES>

        <LOGIN_PACKAGE name="Kerberos" priority="0">

            <LOGIN_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.login.KerberosLoginModule" name="Kerberos Login">

                <PARAMETER_ENTRY name="userAgents" value=".*(Firefox|Iceweasel|Konqueror|MSIE|Opera|Safari|Shiretoko|Gecko).*" />

                <PARAMETER_ENTRY name="useFullPrincipal" value="false" />

            </LOGIN_MODULE>

            <ATTRIBUTES_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.attributes.LDAPAttributesModule" name="LDAP">

                <PARAMETER_ENTRY name="search.base_dn" value="OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="bind_dn" value="CN=Remotezugriff re-lounge allgemein,OU=Fremdfirmenzugriff,OU=Sonstige,OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="search.filter" value="(sAMAccountName=$USER_LOGIN$)" />

                <PARAMETER_ENTRY name="bind_password" value="test" />

                <PARAMETER_ENTRY name="host_url" value="ldap://srvdcfr1.e-spirit.intern,ldap://srvdcfr5.e-spirit.intern" />

                <PARAMETER_ENTRY name="ssl" value="false" />

                <PARAMETER_ENTRY name="attributes" value="cn, displayName, givenName, name, sn, telephoneNumber, department" />

                <PARAMETER_ENTRY name="mode" value="search_compare" />

            </ATTRIBUTES_MODULE>

            <GROUPS_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.groups.LDAPGroupsModule" name="LDAP Group">

                <PARAMETER_ENTRY name="group_attribute" value="memberOf" />

                <PARAMETER_ENTRY name="bind_dn" value="CN=Remotezugriff re-lounge allgemein,OU=Fremdfirmenzugriff,OU=Sonstige,OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="bind_password" value="test" />

                <PARAMETER_ENTRY name="host_url" value="ldap://srvdcfr1.e-spirit.intern,ldap://srvdcfr5.e-spirit.intern" />

                <PARAMETER_ENTRY name="user_dn" value="not-used" />

                <PARAMETER_ENTRY name="ssl" value="false" />

            </GROUPS_MODULE>

        </LOGIN_PACKAGE>

        <LOGIN_PACKAGE name="LDAP username/password" priority="1">

            <LOGIN_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.login.RequestParameterLoginModule" name="Request Parameter Login">

            </LOGIN_MODULE>

            <AUTHENTICATION_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.authentication.LDAPAuthenticationModule" name="LDAP">

                <PARAMETER_ENTRY name="search.base_dn" value="OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="search.filter" value="(sAMAccountName=$USER_LOGIN$)" />

                <PARAMETER_ENTRY name="bind_dn" value="CN=Remotezugriff re-lounge allgemein,OU=Fremdfirmenzugriff,OU=Sonstige,OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="allowEmptyPasswords" value="false" />

                <PARAMETER_ENTRY name="bind_password" value="test" />

                <PARAMETER_ENTRY name="authentication" value="search_bind" />

                <PARAMETER_ENTRY name="host_url" value="ldap://srvdcfr1.e-spirit.intern,ldap://srvdcfr5.e-spirit.intern" />

                <PARAMETER_ENTRY name="ssl" value="false" />

                <PARAMETER_ENTRY name="user_dn" value="not-used" />

                <PARAMETER_ENTRY name="propertyFile" value="/WEB-INF/fsp-authProp.properties" />

                <PARAMETER_ENTRY name="createCookie" value="false" />

            </AUTHENTICATION_MODULE>

            <ATTRIBUTES_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.attributes.LDAPAttributesModule" name="LDAP">

                <PARAMETER_ENTRY name="search.base_dn" value="OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="bind_dn" value="CN=Remotezugriff re-lounge allgemein,OU=Fremdfirmenzugriff,OU=Sonstige,OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="search.filter" value="(sAMAccountName=$USER_LOGIN$)" />

                <PARAMETER_ENTRY name="bind_password" value="test" />

                <PARAMETER_ENTRY name="host_url" value="ldap://srvdcfr1.e-spirit.intern,ldap://srvdcfr5.e-spirit.intern" />

                <PARAMETER_ENTRY name="ssl" value="false" />

                <PARAMETER_ENTRY name="attributes" value="cn, displayName, givenName, name, sn, telephoneNumber, department" />

                <PARAMETER_ENTRY name="mode" value="search_compare" />

            </ATTRIBUTES_MODULE>

            <GROUPS_MODULE class="de.espirit.firstspirit.opt.personalisation.modules.groups.LDAPGroupsModule" name="LDAP Group">

                <PARAMETER_ENTRY name="group_attribute" value="memberOf" />

                <PARAMETER_ENTRY name="bind_dn" value="CN=Remotezugriff re-lounge allgemein,OU=Fremdfirmenzugriff,OU=Sonstige,OU=Abteilungen,DC=e-spirit,DC=intern" />

                <PARAMETER_ENTRY name="bind_password" value="test" />

                <PARAMETER_ENTRY name="host_url" value="ldap://srvdcfr1.e-spirit.intern,ldap://srvdcfr5.e-spirit.intern" />

                <PARAMETER_ENTRY name="ssl" value="false" />

                <PARAMETER_ENTRY name="user_dn" value="not-used" />

            </GROUPS_MODULE>

        </LOGIN_PACKAGE>

    </LOGIN_PACKAGES>

    <GLOBAL_CONFIG_PARAMETERS>

        <PARAMETER_ENTRY name="useDummyUser" value="false" />

        <PARAMETER_ENTRY name="activateEveryoneGroup" value="true" />

        <PARAMETER_ENTRY name="everyoneGroupString" value="" />

        <PARAMETER_ENTRY name="ssoCookieName" value="" />

        <PARAMETER_ENTRY name="ssoCookieLifetime" value="" />

        <PARAMETER_ENTRY name="ssoCookieDomain" value="" />

        <PARAMETER_ENTRY name="log4JFallbackConfigFile" value="/WEB-INF/fsp-logging.conf" />

    </GLOBAL_CONFIG_PARAMETERS>

</FIRSTPERSONALISATION>

Woran könnte es liegen?

Danke und Gruß,

Benny Kannengießer

// re-lounge

Attache die personalization.xml

0 Kudos

Die XML-Datei sieht im Prinzip genau aus wie bei meiner funktionsfähigen Test-WebApp, die ich vor einigen Monaten erstellte. Sie kombiniert Kerberos mit LDAP als Fallback.

Hier die beiden Seiten der Test-WebApp. Wichtig ist der Parameter "loginPackage" bei ldap.jsp, der auf das LDAP-Loginpackage verweist und vermutlich das fsp:isNotAuthorized in index.jsp, weil ansonsten eben nur 401 dort angezeigt würde, sofern man nicht mittels des Zusatzparameters bei fsp:authorize auf eine andere Seite automatisch umleitet, was in meinem Beispiel aber nicht erfolgt.

Datei index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="FIRSTpersonalisation" prefix="fsp" %>

<html><body>

<fsp:isAuthorized groups="*">

          <fsp:userInfo>

                    <p>logged in: <%= login %></p>

          </fsp:userInfo>

          <p>Attributes:<br/>

          <fsp:userAttributes attributes="mail,displayName,telephoneNumber">

                     <%= attributename %>: <%= attributevalue %><br/>

          </fsp:userAttributes>

          <p>Groups:<br/>

          <fsp:userGroups>

                    <%= groupname %>

          </fsp:userGroups>

          </p>

          <form method="POST" action="<%= request.getContextPath() %>/do.logout">

                      <input type="hidden" name="redirect_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Logout" />

          </form>

</fsp:isAuthorized>

<fsp:isNotAuthorized groups="*">

          <p>not logged in</p>

          <form method="GET" action="ldap.jsp">

                      <input type="hidden" name="login_ok_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Login" />

          </form>

</fsp:isNotAuthorized>

</body></html>

<fsp:authorize />

Datei ldap.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="FIRSTpersonalisation" prefix="fsp" %>

<html><body>

<fsp:isAuthorized groups="*">

          <fsp:userInfo>

                    <p>already logged in: <%= login %></p>

          </fsp:userInfo>

          <form method="POST" action="<%= request.getContextPath() %>/do.logout">

                      <input type="hidden" name="redirect_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Logout" />

          </form>

</fsp:isAuthorized>

<fsp:isNotAuthorized groups="*">

          <form method="POST" action="<%= request.getContextPath() %>/do.login">

                    <p>user: <input type="text" name="login" /></p>

                      <p>password: <input type="password" name="password" /></p>

                    <input type="hidden" name="loginPackage" value="LDAP" />

                      <input type="hidden" name="login_ok_url" value="<%= request.getContextPath() %>" />

                      <input type="hidden" name="wrong_login_url" value="<%= request.getRequestURI() %>" />

                      <input type="submit" value="Login" />

          </form>

</fsp:isNotAuthorized>

</body></html>

0 Kudos

Der hidden Parameter "loginPackage" hat gefehlt...

Jetzt klappt alles.

Vielen Dank für den Beispiel-Code!

Gruß,

Benny Kannengießer

// re-lounge

0 Kudos