2016-09-28 8 views
0

私は春のセキュリティを使用してユーザーを認証しています。ユーザーは第三者によって認証され、アプリケーションに到達すると既に認証されます。 これを実装するには、Authenticationオブジェクトをシミュレートしました。春のセキュリティ - 認証を作成するためのユーザー名とパスワードが必要ですか

私はユーザー名とパスワードを持っておらず、代わりに識別子を持っています。この識別子が有効かどうか、私のカスタムコードを使用していないかどうかを確認します。次のように

私のクエリは次のとおりです。

  1. は私が認証オブジェクトを作成するためのユーザー名とパスワードが必要でください。 私はユーザー名とパスワードを提供せずに済んでおり、私のアプリケーションは正常に動作します。

  2. 私は春のセキュリティを正しく使用していることを確認したいだけです。

  3. 認証オブジェクトにユーザー名とパスワードを入れないと、影響はありません。 AbstractUserDetailsAuthenticationProvider:

    //ユーザーが入力した元の資格情報を返すようにしてください。 //エンコードされたパスワードでもそれ以降の試行は成功します。

私はカスタムプロバイダも実装しています。

  1. 上記のコメントは何を意味しますか?
  2. 私のアプローチは正しいですか?

答えて

1

スプリングセキュリティのAuthenticationインターフェイスは、設定されたセキュリティルールと現在のコールコンテキストに対して検証を実行するためのトークンを表します。このインタフェースは、getPrincipal,getCredentials,getDetails,getAuthorities,isAuthenticatedおよびsetAuthenticatedの6つの方法を有する。

自分でユーザーを認証しているので、あなたはisAuthenticated開始は、認証されたユーザを示すためにtrueを返すようにフローの適切な段階でsetAuthenticated(true)を呼び出すと、ほとんど心配する必要があります。さらに、AuthenticationGrantedAuthorityを追加して、ロールベースのチェックが正しく機能するようにすることもできます。

しかし、getPrincipal(フォームログインの場合のユーザー名)がユーザーまたはセッションごとに一意の値を返すことを確認すると便利です。これにより、フレームワークが一意にユーザーを識別するために使用する一意でないプリンシパルのために、ユーザーセッションが交換される可能性がなくなります。

getCredentialsgetDetailsは実装されていない可能性があります。実際には、アプリケーションには実際にユーザーを認証するための資格情報がないため、getCredentials(フォームログインの場合はパスワード)を実装しないでください。また、ユーザーが正常に認証された後に資格情報を保持することはセキュリティ上のリスクです。

+0

こんにちはマニッシュ、ありがとう。私はすでに上記のようにして、私のアプリケーションは正常に動作しています。私はセキュリティに関する専門家ではないので尋ねたので、私のアプローチが正しいかどうかを確認したいと思っていました。上記のテキストは、いくつかの春のセキュリティ文書から引用されていますか?また、getPrinciple()は認証に使用した識別子を返します。識別子はユーザ名ではなく、特定のユーザの一意の値です。私は私のケースでは、元々記載された理由でユーザー名/パスワードを使用して認証していないので、フォームのログインを使用しません。 –

+0

詳細は私のカスタムAuthenticationProviderとAuthenticationFilterの実装経験からです。はい、ユーザーまたはセッションごとに一意である限り、プリンシパルとして認証識別子を使用する必要があります。この方法では、認証トークンが乱されることはありません。セッションごとの識別子を使用する場合、同時セッション制御やRemember-Meなどの機能は、ユーザーごとの一意のプリンシパルに依存するため、すぐには機能しません。 – manish

関連する問題