4

Spring MVC コントローラー (json のみを使用) を保護するための最良の方法を見つけようとしています。私は多くの質問に従いました (たとえば、RESTful Authentication via Spring )。私の問題は非常に一般的なユースケースのようですが、具体的な答えは見つかりませんでした。

要件:

  1. すべての通信は、json を使用してモバイル クライアント (Android/iPhone) から行われます。
  2. ユーザーは facebook (facebook sdk によるクライアント側認証) を使用してログインできます。これは、サーバーに送信するパスワードがないことを意味します。
  3. パスワードがなく、クライアントが静かにログインしたいので、BASIC認証は望ましくありません。
  4. 重要ユーザーの負担を軽減したいので、登録画面はありません。ユーザー ログイン (facebook/email) でサーバーがその場で DB 内にユーザーを作成します。Facebook の場合、ユーザーに何も尋ねていません。彼はすでにfacebook sdkでローカルに認証されています。電子メールに関しては、サーバーはユーザーに、他の誰かの電子メールを使用する可能性があるため、パスワードを入力するように求めます。

特に、ステップ 4 の実装に苦労しています。サーバーが Spring を大量に使用しているため、おそらく Spring Security を使用する予定です。

4

1 に答える 1

2

Web アプリケーションの 1 つで #4 と同様のことを行います。基本的に、プロセスは次のとおりです。

1) setConnectionVales メソッドを作成 (または FacebookApiAdapter をオーバーライド) します。

2) Facebook プロファイルから電子メール (または内部ユーザー名に使用しているもの) を取得します。

3) 新しい認証トークンを作成します。

 UsernamePasswordAuthenticationToken newAuth = new  UsernamePasswordAuthenticationToken(user, "yourrealm",authorities); 

user は内部ユーザー タイプと一致し、authorities は Set です (ヒント: 新しい SimpleGrantedAuthority で文字列を追加するだけです)。

4) SpringSecurityContext に新しい認証トークンを設定します。

SecurityContextHolder.getContext().setAuthentication(newAuth);

次に、新しいトークンが GrantedAuthorities のセットでその役割を持っている限り、通常の Spring セキュリティ設定を使用して ROLE によって物事を保護できます。

于 2013-02-28T16:11:24.647 に答える