SORU
5 EKİM 2011, ÇARŞAMBA


Bahar Özel Güvenlik kimlik Doğrulama ve Şifre Kodlaması

Bir öğretici var ya herkes Bahar-Güvenlik ile aşağıdakileri yapmak için nasıl işaretçiler var mı?

Görev:

Kimlik doğrulama kullanıcı adı için benim veritabanından tuz ve depolanan şifrelenmiş parola karşılaştırmak için sağlanan parola (giriş sayfasından) şifrelemek için kullanmak istiyorum (bir.k.bir. kullanıcı kimlik doğrulaması).

ek bilgi:

Özel bir veritabanı yapısı kullanıyorum. * *9 döndürün özel bir DAOProvider veritabanından bilgileri almak için kullandığı bir özel UserDetailsService ile oluşturulur.

security.xml dosyamı şimdiye kadar:

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
    </authentication-provider>
</authentication-manager>

şimdi ihtiyacım olacak sanırım

        <password-encoder hash="sha" />

ama başka ne? Şifreyi nasıl kodlamak için bahar güvenlik databaseprovided tuz kullanmak söylerim?


edit:

This SO post informatative ama yeterli buldum: ben xml tuz kaynağı şifre kodlayıcı tarafından kullanılmak üzere tanımlarsanız, bunun gibi

        <password-encoder ref="passwordEncoder">                
            <salt-source ref="saltSource"/>
        </password-encoder>

Benim özel tuz kullanmak için özel bir SaltSource yazmak zorunda kalacağım. Ama o UserDetails nesnenin içinde bulunmak değil. Yani...

Alternatif 1:

Sonra tuz özelliği olabilecek UserDetails özel bir Uygulama kullanabilir miyim?

<beans:bean id="saltSource" class="path.to.MySaltSource"
    p:userPropertyToUse="salt"/>

ve

@Service("userDetailsService") 
public class UserDetailsServiceImpl implements UserDetailsService {
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException, DataAccessException {

        // ...
        return buildUserFromAccount(account);
    }

    @Transactional(readOnly = true)

    UserDetailsImpl buildUserFromAccount(Account account){

        // ... build User object that contains salt property
}

özel Kullanıcı Sınıfı:

public class UserDetailsImpl extends User{

    // ...

    private String salt;

    public String getSalt() { return salt; }

    public void setSalt(String salt) { this.salt = salt; }
}

security.xml:

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder hash="sha">                
        <salt-source ref="saltSource"/>
    </password-encoder>
    </authentication-provider>
</authentication-manager>

<beans:bean id="saltSource" class="org.springframework.security.authentication.dao.ReflectionSaltSource" p:userPropertyToUse="salt"/>

< / ^ br .

Alternatif 2:

Aksi halde veritabanından userName verilen bir süre için, tuz ayıklamak için SaltSource benim accountDAO enjekte etmek zorunda kalırım.

Nasıl Bahar Güvenlik SaltSource çağrı mı? AMA: Her zaman 23 ** ile mi?

O zaman sadece benim SaltSource benim kullanan userDetails.accountName 26 ** tuz almak için emin olmak zorundayım.


Edit2:

Benim yaklaşımdır.. eski.. :( ben sadece StandardPasswordEncoder ben hala tam olarak kullanmak için nasıl anlamaya var) kullanacağım sanırım. bunu yeni öğrendim

BTW: ben uygulanan ilk seçenek ile özel bir UserDetails sınıfının genişletilmesi Kullanıcı sınıfı ve bir yerde bir tuz özelliği olan bir zaman geçirilen SaltSource gibi bir userPropertyToUse gibi oldu önerilen bu YÜZDEN post bahsedilen Düzenle 1...


EDİT 3:

Sadece StandardPasswordEncoder çalışıyor, bazı göstericiler burada bırakıyorum:

Kimlik Doğrulama için: StandardPasswordEncoder kullanın

<beans:bean id="encoder" 
    class="org.springframework.security.crypto.password.StandardPasswordEncoder">
</beans:bean>


<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder ref="encoder" />         
    </authentication-provider>
</authentication-manager>

Bu sürüm 3.1.0-güvenlik bahar-crypto modülü gerektirir.RC? bildiğim kadarıyla. 3.0 olan bir depo bulamadım. bir yerlerde sürüm 3.0.6 ve benzeri dahil sürümleri listelenmiştir rağmen. Ayrıca bu belge, sadece onunla giderim diye düşündüm spring security 3.1 bahsediyor.

Bir kullanıcı (benim için sadece bir yönetici bunu yapabilir) oluştururken, sadece kullanın

        StandardPasswordEncoder encoder = new StandardPasswordEncoder();
        String result = encoder.encode(password);

ve ben de bittim.

Bahar güvenlik rastgele bir tuz oluşturmak ve veritabanında saklamadan önce parola dizesi ekleyintuz sütunu artık gerekli değildir.

Olabilir ancak aynı zamanda sağlamak küresel bir tuz gibi bir oluşturucu bağımsız değişken (new StandardPasswordEncoder("12345");), ama bilmiyordum nasıl kurmak benim Güvenlik Yapılandırması almak için bu değerden fasulye yerine temin statik bir dize ile <constructor-arg name="secret" value "12345" />. Ama yine de tabi nasıl bilmiyorum.

CEVAP
18 EKİM 2011, Salı


Benim sorunum çözüldü ve başka bir yorum ya da cevap verildi olarak cevap olarak işaretleyeceğim:

1 - Alternatif 1 Düzenlecevaplar orijinal soru

AMABen de tarif ettiği gibi, Spring Security 3.1 artık gerekli değildir özel şifre tuzlama eski bir yaklaşım olduğunu öğrendim

3 düzenlemekotomatik Tuz StandardPasswordEncoder kullanmak için bazı ipuçları bıraktığım yerde bu şifre ile saklanır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008