2017-04-03 16 views
10

Bir WildFly 9.0.2 Sunucusunda bir Özel Uygulama Ortamı ile bir Web Uygulaması çalıştırıyorum (ki bu da Örgütsel Birimlerden B için birden çok Kurumsal Birimi A için yinelemeli olarak sorgulamalıdır. şöyle standalone.xml yapılandırılmış bir kullanıcı için Birimler C):Bir Kullanıcı için birden çok OU'yu LDAP rollerini yinelemeli olarak sorgula

<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"/> 
      ... 

kullanıcı örneğin onun adını (örn testi a), şifre (sağlayarak web sitesinde neyse) ve bir kullanıcı grubunun seçiminde kaydeder bir açılır menü (ör. UserGroupA). Ardından, LdapLoginModule öğesini genişleten özel oturum açma modülü (de.test.LoginModule.class), önekini bağımsız xml'den alarak ve sonek ekleyerek,
örn. öneki: LoginModule tarafından uid=
Yapı: testA,ou=UserGroupA
eki: Sonuçlanan ,ou=users,dc=test,dc=de
: Şu anda mükemmel çalışıyor uid=testA,ou=UserGroupA,ou=users,dc=test,dc=de . ou=groups,dc=test,dc=de arasındaki roller alınır ve web.xml dosyasında tanımlanan rollerin yerine getirildiği güvenlik kısıtlamaları uygulanır.

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 
| | |-- ... 

Şimdi ou=groups,dc=test,dc=de olarak sadece rolleri sorgulamak gerekir değil tüm:

<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> 

Şimdi Kuruluş Birimi "ProjectControlCenter" gibi pek görünüyor LDAP ağaç yapısında, eklendi ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=de Burada atanan roller benzersiz bir üyedir ve bunu kullanıcıya ekler. Ayrıca ou=permissions,ou=ProjectControlCenter,ou=applications,dc=test,dc=deou=resources,ou=ProjectControlCenter,ou=applications,dc=test,dc=de tüm almak için başka bir sorgulama, kullanıcı için de ekleyerek, benzersiz bir üyesidir.

Yani soru şu: var mı yinelemeli belirli bir kullanıcı için tüm grupları sorgulamak için herhangi bir yolu, LDAP yapılandırmaları yoluyla bu izinleri için bu gruplara ve kaynaklar için izinler veya yaparım LdapLoginModule.class ait createLdapInitContext(String username, Object credential) yöntemini aşırı gerekir gerekli sorguları elde etmek için?

cevap

0

Mümkün ancak belirli ölçüde mümkündür. Kullanım durumunuz oldukça karmaşık görünüyor ve ben şahsen böyle bir tasarımdan kaçınacağım. Zaten kontrol edip etmediğinizden emin değilsiniz, ancak sorularınız bir here ile ilgilidir.

İlgili konular