2017-04-03 5 views
10

Ich führe eine Webanwendung auf einem WildFly 9.0.2 Server mit einem benutzerdefinierten Anmeldebereich aus (der rekursiv mehrere organisatorische Einheiten A für Organisationseinheiten B abfragen muss, die von organisatorisch abgefragt werden) Einheiten C für einen Benutzer), die wie so in der standalone.xml konfiguriert ist:rekursiv LDAP-Rollen von mehreren Organisationseinheiten für einen Benutzer abfragen

<security-realm name="LoginRealm"> 
    <authentication> 
     <ldap connection="EC2" base-dn="ou=users,dc=test,dc=de"> 
      <username-filter attribute="uid"/> 
     </ldap> 
    </authentication> 
</security-realm> 
... 
<security-domain name="other" cache-type="default"> 
    <authentication> 
     <login-module code="de.test.LoginModule" flag="required"> 
      <module-option name="principalDNPrefix" value="uid="/> 
      <module-option name="principalDNSuffix" value=",ou=users,dc=test,dc=de"/> 
      <module-option name="rolesCtxDN" value="ou=groups,dc=test,dc=de"/> 
      <module-option name="roleAttributeID" value="cn"/> 
      <module-option name="roleAttributeIsDN" value="false"/> 
      ... 

der Benutzer meldet sich auf der Website von seinen Benutzernamen bereitstellt (zB testa), Passwort (zB was auch immer) und die Auswahl eines von Usergroup ein Dropdown-Menü (zB UserGroupA). Dann führt das benutzerdefinierte Anmeldemodul (de.test.LoginModule.class), das das LdapLoginModule erweitert, eine Suche nach den Rollen aus, indem es die Prinzipalzeichenfolge erstellt, indem es das Präfix von der eigenständigen XML-Datei übernimmt und anschließend das Suffix hinzufügt. prefix: uid=
Erstellen von Loginmodule: testA,ou=UserGroupA
Suffix: ,ou=users,dc=test,dc=de
in Resultierende: uid=testA,ou=UserGroupA,ou=users,dc=test,dc=de , die jetzt perfekt funktioniert. Die Rollen von ou=groups,dc=test,dc=de werden abgerufen und die Sicherheitseinschränkungen, die in der web.xml mit den entsprechenden Rollen definiert sind, werden ausgeführt.

<security-constraint> 
    <display-name>Test-Service</display-name> 
    <web-resource-collection> 
     <web-resource-name>Test</web-resource-name> 
     <url-pattern>/admin/*</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>Only Project Processors may see this</description> 
     <role-name>Project Processor</role-name> 
    </auth-constraint>  
</security-constraint> 

Nun ist die Organisationseinheit „ProjectControlCenter“ wurde an die LDAP-Baumstruktur hinzugefügt, die wie so aussieht:

dc=test,dc=de 
|-- ou=applications 
| |-- ou=ProjectControlCenter 
| | |-- ou=permissions 
| | | |-- cn=group.Project Processor.manage 
| | | |-- cn=group.Project Processor.read 
| | | |-- cn=group.Project Monitorer.read 
| | | |-- ... 
| | |-- ou=resources 
| | | |-- cn=ProjectControlCenter.Applicaton 
| | | |-- cn=ProjectControlCenter.List 
| | | |-- cn=ProjectControlCenter.System 
| | | |-- ... 
|-- ou=groups 
| | |-- cn=Project Processor 
| | |-- cn=Project Monitorer 
| | |-- ... 
| |-- ou=users 
| | |-- ou=UserGroupA 
| | | |-- uid=testA 
| | | |-- uid=testB 
| | | |-- uid=testC 
| | |-- ou=UserGroupB 
| | |-- ... 

Jetzt die ich brauche, um abzufragen, nicht nur die Rollen als ou=groups,dc=test,dc=de sondern auch all ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de Hier sind die zugewiesenen Rollen ein eindeutiges Mitglied von und fügen diese dem Benutzer hinzu. Darüber hinaus wäre eine weitere Abfrage erforderlich, um alle ou=resources,ou=ProjectControlCenter,ou=applications,dc=test,dc=de, wo die ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de ein eindeutiges Mitglied sind, zu erhalten und es auch dem Benutzer hinzuzufügen. Die Frage ist also: Gibt es eine Möglichkeit, alle Gruppen für einen bestimmten Benutzer, Berechtigungen für diese Gruppen und Ressourcen für diese Berechtigungen durch LDAP-Konfigurationen rekursiv abzufragen, oder muss ich die createLdapInitContext(String username, Object credential) Methode der LdapLoginModule.class überladen um die benötigten Anfragen zu erreichen?

Antwort

0

Es ist aber in gewissem Umfang nur möglich. Ihr Anwendungsfall scheint ziemlich kompliziert zu sein, und ich persönlich würde diese Art von Design vermeiden. Nicht sicher, ob Sie bereits überprüft haben, aber Ihre Fragen scheinen mit einem here verwandt zu sein.

Verwandte Themen