2012-07-03 142 views
16

ユーザがSpring Securityで電子メールのリンクをクリックすると自動ログインを実行しようとしています。Spring Security - パスワードなしのプログラムによるログイン

私は次のようなプログラムによるログインを実行するための例をたくさん見てきました:

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
try { 
    Authentication auth = authenticationManager.authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(auth); 
    repository.saveContext(SecurityContextHolder.getContext(), request, response); 
    rememberMeServices.loginSuccess(request, response, auth); 
.... 

私が見る問題は、私はUsernamePasswordAuthenticationTokenを作成することはできませんので、私は元のパスワードを持っていないということです。プレーンテキストのパスワードがない場合(私は暗号化されたものを持っています)、他の方法でユーザーにログインできますか?

ありがとうございます。

+0

あなたのBean設定を表示できますか? ( 'http'ネームスペースと' AuthenticationManager'と 'AuthenticationProviders')特にありません。 – Xaerxess

+0

彼らは私にちょうど答えました。とにかく、ありがとう。 –

答えて

30

電子メール内のリンクからのログインを許可するという点で、あなたが何をしているのかを知っていることに注意してください。 SMTPは安全なプロトコルではないため、電子メールを認証の形式として使用している人に頼るのは悪いです。

AuthenticationManagerが認証されていることがわかっている場合は、AuthenticationManagerを使用する必要はありません。以下に示すように代わりにあなただけの直接認証を設定することができます:あなたは完全な例をしたい場合は

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, 
    AuthorityUtils.createAuthorityList("ROLE_USER")); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

、あなたは春のセキュリティ3.1 (InfoQ video of presentation)入門のための基礎となったsecure mailアプリケーションにSignupControllerを参照することができます。

+0

恐ろしい答え。どうもありがとうございました。私はこれを行うには危険だったのか分からなかったが、私はどれが最良のアプローチであるかを分析する:)。 –

+0

春にパスワードなしで認証を実装するにはどうすればよいですか?あるいは、Springではパスワードを使用できない認証はできませんか? – Utku

+1

ところで、電子メールで送信されたリンクによる認証が安全でない場合、ほぼすべてのWebサイトがパスワードリセットリンク用の電子メールを使用しているため、ほぼWebサイトは安全です。私はここに何かを逃していますか – Utku

関連する問題