1

Jasypt 1.9.0、Spring 3.1.1.RELEASE、および Maven 3.0.3 を使用しています。Jasypt コマンド ライン ツールを使用して、次のようにパスワードを生成します …</p>

./digest.sh input=admin providerClassName=org.bouncycastle.jce.provider.BouncyCastleProvider algorithm=SHA-256  saltGeneratorClassName=org.jasypt.salt.ZeroSaltGenerator

ただし、ログイン画面で誰かが入力したパスワードとの照合を試みるように Spring セキュリティを構成すると…</p>

<beans:bean id="bcProvider" class="org.bouncycastle.jce.provider.BouncyCastleProvider" />

<beans:bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
    <beans:property name="algorithm">
        <beans:value>SHA-256</beans:value>
    </beans:property>
    <beans:property name="provider">
        <beans:ref bean="bcProvider" />
    </beans:property>
    <beans:property name="saltGenerator">
        <beans:bean id="saltGenerator" class="org.jasypt.salt.ZeroSaltGenerator"/>
    </beans:property>
</beans:bean>

<!-- This Spring Security-friendly PasswordEncoder implementation will -->
<!-- wrap the StringDigester instance so that it can be used from -->
<!-- the security framework. -->
<beans:bean id="passwordEncoder" class="org.jasypt.spring.security3.PasswordEncoder">
    <property name="stringDigester">
        <ref bean="jasyptStringDigester" />
    </property>
</beans:bean>

<authentication-manager alias="authenticationManager" id="authenticationManager">
    <authentication-provider user-service-ref="sbdUserDetailsService">
        <password-encoder ref="passwordEncoder" />
    </authentication-provider>
</authentication-manager>

Spring は保存されているものとは異なるパスワードを生成しているため、ユーザーを認証できません。不足している構成はありますか?認証中に、SPring が Jasypt とは異なるものを生成するのはなぜですか?

4

1 に答える 1

0

複数回実行digest.shすると、同じ入力値に対して異なるハッシュが得られます。Jasypt はタイムスタンプまたはランダムな文字列をソルトとして使用すると仮定します。

同じハッシュを生成できるようにするには、使用されるソルトを知っているか、生成方法を制御する必要があります。と呼ばれる cli パラメータがありますsaltGeneratorClassNameSaltGeneratorインターフェイスを実装するクラスを提供することで、ソルトの生成を制御できます。

アップデート:

塩の位置について言ったことは忘れてください。jasyptStringDigester少しだけ変更する必要があります。

<beans:bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester">
    <beans:property name="algorithm">
        <beans:value>SHA-256</beans:value>
    </beans:property>
    <beans:property name="provider">
        <beans:ref bean="bcProvider" />
    </beans:property>
    <beans:property name="saltGenerator">
        <beans:ref bean="saltGenerator" />
    </beans:property>
</beans:bean>

<beans:bean class="impl.of.your.SaltGenerator" id="saltGenerator" />

そして、あなたはに提供する必要がありimpl.of.your.SaltGeneratorますdigest.sh:

./digest.sh input=admin \
    providerClassName=org.bouncycastle.jce.provider.BouncyCastleProvider \
    algorithm=SHA-256 \
    saltGeneratorClassName=impl.of.your.SaltGenerator
于 2012-12-12T07:43:25.920 に答える