2017-02-27 8 views
0

私は来るべきプロジェクトのための仕様を書いているだけで、Spring SecurityのAuthenticationProviderインターフェースの詳細を見つけました。返されたAuthenticationオブジェクトが依然として認証する(..)ために、依然として認証情報を含む必要がありますか?

Authentication authenticate(Authentication authentication) の場合、返されるオブジェクトは、Authenticationオブジェクトです。 Springのjavaドキュメントによると、返り値は

戻り値: 資格情報を含む完全に認証されたオブジェクトです。 AuthenticationProviderが渡されたAuthenticationオブジェクトの認証をサポートできない場合はnullを返すことがあります。そのような場合、提示されたAuthenticationクラスをサポートする次のAuthenticationProviderが試行されます。

正常に認証された後もオブジェクトにはまだ資格情報が含まれている必要がありますか?これは私には意味がありません。認証後、すぐに資格情報に関するすべての情報を削除したいのですが、なぜそれを削除したくないのですか?

答えて

1

春のセキュリティは、機密のクレデンシャル情報を削除し、Spring Security Referenceを参照してください。

10.1.1(以降、春のセキュリティ3.1から)デフォルトでは成功した認証

に資格情報を消去ProviderManagerがクリアしようとします成功した認証要求によって返されるAuthenticationオブジェクトからの機密資格情報。これにより、パスワードが必要以上に長く保持されるのを防ぐことができます。

たとえば、ステートレスアプリケーションのパフォーマンスを向上させるために、ユーザーオブジェクトのキャッシュを使用している場合に問題が発生することがあります。 Authenticationにキャッシュ内のオブジェクトへの参照(UserDetailsなど)があり、資格情報が削除されている場合、キャッシュされた値に対して認証することはできなくなります。キャッシュを使用している場合は、これを考慮する必要があります。明白な解決策は、キャッシュの実装、または返されたAuthenticationオブジェクトを作成するAuthenticationProviderにオブジェクトのコピーを作成することです。また、ProviderManagereraseCredentialsAfterAuthenticationプロパティを無効にすることもできます。詳細については、Javadocを参照してください。

+0

ありがとう、それは私が期待していたものです。したがって、Javaのドキュメントは、明示的に「信用証明書を含む完全に認証されたオブジェクト」と言っているので少し混乱します。 –

関連する問題