2017-05-27 4 views
1

私はまず、ユーザーが認証された認証マネージャーか、またはユーザーが認証されたJWTをクライアント装置上でoAuth2環境の認証サーバーを経由して取得した後で実装できるカスタムAuthenticationProviderについて考えるのは混乱しました。oAuth2 Spring Securityを介して認証(プリンシパル)オブジェクトを取得しますか?

次に、システムに実装されているoAuth2フローを使用して認可サーバーを通じて「認証済み」であるため、ユーザーはAuthenticationManagerを経由する必要はありません。彼らはそれを証明するためにJWTアクセストークンを持っています、そして、実際に、彼らは許可されたアクセストークンなしでどんなResource Serverエンドポイントにも打つことさえできません。

しかし、私はまだすべてのユーザー情報を保持する認証オブジェクトにアクセスする方法が好きです。

AuthenticationManagerを使用せずにこの認証オブジェクトへの参照を作成して取得する方法を教えてください。私はここでかなり混乱しています。

私がこの認証オブジェクトを必要とする主な理由は、Spring SecurityのACLと一緒にカスタム式でメソッドレベルのセキュリティを使用する予定があるからです。言い換えれば、私はoAuth2が欲しいと私はまた、ACLを使用して、ユーザーがどのドメインオブジェクトに対して権限/権限を持っているかについて、きめ細かく細かく制御したいと考えています。

oAuth2を設定した後で、この認証オブジェクトにアクセスするにはどうすればよいですか(おそらくユーザーの現在のアクセストークンをフィールド/プロパティとして作成することさえできますか?

ありがとうございました。

@RequestMapping(...) 
Output do(Input input) 

あなたはパラメータへの認証オブジェクトを追加することができます:

@RequestMapping(...) 
Output do(Input input, Authentication authentication) 

春は自動的にこの依存関係を配線します

答えて

1

一つは、以下のコントローラメソッドを持っています。 あなたが深層/他のクラスにいる場合は、

SecurityContextHolder.getContext().getAuthentication() 
+0

ですのでご理解ください。 Spring SecurityでoAuth2を使用すると、自動的にAuthenticationオブジェクトが構築され、SecurityContextHolder.getContext()。setAuthentication()で設定されます。 trueの場合、1)これを行うために使用するAuthenticationManagerの実装は何ですか? 2)それがAuthenticationProviderインスタンスの場合は、どの実装ですか? 3)UserDetailsS​​erviceの実装は、要求ヘッダーで送信されているトークンが有効であることを確認してから、トークンのリソース所有者に属するユーザー名やその他の資格情報もデータソースから抽出していますか? –

+1

Sryさんは、最後の日オンラインではありませんでした。 Yes Springは、認証トークンの内容に基づいてこのオブジェクトを自動的に作成します。通常は、独自のUserDetailsS​​ervice実装を提供する必要があります。 ここで簡単なDBログインとoauth2を使用した例を作成しました:https://github.com/miwoe/spring-security しかし、それは十分に文書化されていません。これは、これに基づいています:https://github.com/spring-guides/tut-spring-security-and-angular-js –

関連する問題