2013-05-09 31 views
5

Spring Security, LDAP sunucusuna karşı kimlik doğrulaması yapmak üzere yapılandırılmış.Spring Ldap Kimlik Doğrulaması ve Yerel veri yolundan rolleri

<security:authentication-manager > 
    <security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 

</security:authentication-manager> 

Kimlik doğrulamasından sonra, aynı kullanıcı için yerel veritabanından rol yüklemek istiyorum. Yerel veritabanı rollerini "ldap kimlik doğrulama sağlayıcısı" kullanarak nasıl yükleyebilirim?

Ben aşağıda ikinci kimlik doğrulama sağlayıcısı eklerseniz:

<security:authentication-manager > 
    <security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 
      <security:authentication-provider ref="daoAuthenticationProvider" /> 
</security:authentication-manager> 

daoAuthenticationProvider eklendi, ancak ilk yetkilendirme sağlayıcı kullanıcının kimliğini doğrular zaman İlkbahar ikinci sağlayıcı kullanmaz. Yalnızca ilk auth sağlayıcısı kimlik doğrulaması yapmazsa, listede bir sonraki gider. Biz

<security:ldap-authentication-provider user-dn-pattern="uid={0}" /> 

yerel veritabanından rollere yüklemek için özelleştirmek için var gibi

Yani temelde bakmak.

Herhangi bir öneriniz var mı? Bu nasıl uygulanmalı?

cevap

5

Kimlik doğrulama sağlayıcısının, başarılı kimlik doğrulaması için tam olarak doldurulmuş bir kimlik doğrulama belirteci sağlaması gerekir; bu nedenle, kullanıcının kimlik bilgilerini kontrol etmek için bir sağlayıcı kullanamazsınız ve bir diğeri de yetkilileri (rolleri) atayamaz. Ancak, bir ldap auth sağlayıcısını, kullanıcı rollerini varsayılan davranış yerine (ldap'daki kullanıcı gruplarını ararken) veritabanından almak için özelleştirebilirsiniz. LdapAuthenticationProvider, enjekte edilen iki stratejiye sahiptir: kimlik doğrulamasının kendisini yapan (LdapAuthenticator) ve kullanıcının yetkilerini getiren başka bir (LdapAuthoritiesPopulator). Veritabanından rolleri yükleyen bir LdapAuthoritiesPopulator uygulama sağlarsanız, gereksinimlerinizi sağlayabilirsiniz. Zaten bir UserDetailsService veritabanına karşı çalışıyorsanız, bunu UserDetailsServiceLdapAuthoritiesPopulator içine ve LdapAuthenticationProvider içine enjekte ederek kolayca tümleştirebilirsiniz.

Bu yapılandırma oldukça nadir olduğundan, güvenlik xml ad alanı bunu ayarlamak için etiketler/özellikler sağlamamaktadır, ancak ham fasulye yapılandırması çok karmaşık değildir. İşte anahat:

1) Yapılandırmanızın herhangi bir yerinde bir ldap-server varsayalım. Atama ve id, daha sonra başvurmak için izin verecek şekilde önemlidir. authentication-manager bölümünden

<security:ldap-server url="..." id="ldapServer" .../> 

2), sadece özelleştirilmiş sağlayıcıya sevk edecektir:

<security:authentication-manager> 
    <security:authentication-provider ref="customLdapAuthProvider"/> 
</security:authentication-manager> 

3) Şimdi, önemli bir parçası:

authenticator temelde ad alanı yapılandırmasıyla oluşturulacak olanla aynı. (Ldap sunucusu başvuran contextSource niteliğini unutmayın.)

authoritiesPopulator config yerde tanımlanmış olması gerekiyordu senin userService uygulanması etrafında basit bir sarıcı.

+0

Bu kesinlikle aradığım şey. – user2072797

+0

Kullanıcıya userId eklemenin bir yolu var mı. Kullanıcı nesnesinde ldap'dan userId özniteliğine ilişkin eşlem haritası. – user2072797

+0

Bu soru orijinaliyle ilgisiz gibi görünüyor. Yeniden formüle edip yeni bir soru olarak gönderirseniz muhtemelen daha iyi olur, çünkü şu anda sadece onu görebiliyorum (pratik olarak), diğer kullanıcılar size daha iyi cevaplar verebilir. Her neyse, kullanıcı özniteliklerini ldap'den DB'ye eşlemek kesinlikle mümkündür, ancak Spring Security ile yapacağınız bir şey değildir. – zagyi

İlgili konular