Spring WebFlux Securityで複数の認証方法を実装するにはどうすればよいですか?

ピーター

アプリケーションで認証する2つの方法を提供したいと思います。1つは基本認証(ユーザー)であり、もう1つはある種のトークンベース(技術ユーザー)です。私は習慣ReactiveAuthenticationManager必要であることを理解していますが、全体像の手がかりを見つけることができません。(実際、MVCに関する洞察はほとんどなく、WebFluxに関する洞察はありません。)

1)トークンベースのアプローチで認証の名前と資格情報を入力するにはどうすればよいですか?httpBasicを使用するようにSpringSecurityを構成すると、すでに入力されています。なんらかのフィルターが必要ですか?

2)資格情報の取得元を認証マネージャーで区別するにはどうすればよいですか?userRepositoryと(見つからない場合は)technicalUserRepositoryも検索する必要がありますか?

3)オーバーライドする必要がありますSecurityContextRepositoryか?すべてのチュートリアルがそれを行いますが、そうする理由はわかりません。正確には何ですか?このソースは、「SecurityContextRepository、ユーザーのユーザー名とパスワードを比較する通常のSpringSecurityで提供されるuserDetailsS​​erviceに似ています」と述べています。しかし、私は彼が意味していると思いますReactiveUserDetailsServiceちなみに、それはユーザー検索のためだけのUserDetailsServiceものでReactiveUserDetailsServiceはありませ)。

ドライヤー

私はWebfluxが得意で、oauth2で多くの作業を行ってきたので、いくつかの質問に答えてみます。

1)トークンベースのアプローチで認証の名前と資格情報を入力するにはどうすればよいですか?httpBasicを使用するようにSpringSecurityを構成すると、すでに入力されています。なんらかのフィルターが必要ですか?

トークンに資格情報が含まれることはありません。トークンは、認証が行われた後に発行されるものです。したがって、通常は発行サービスに対して認証します。そのサービスに対して自分自身を認証した後、トークンが発行されます。

oauth2トークンの場合、トークン自体は単なるランダムな文字列です。ユーザー自体に関するデータは含まれていません。このトークンが(適切なヘッダーを使用して)SpringSecurityを使用するサービスに送信されるとき。Spring Securityには、基本的にトークンが有効であることを確認するトークンフィルタがあります。通常、トークンを発行者に送信し、「このトークンは有効ですか?」と尋ねます。

異なるjwtを使用する場合、jwtには発行者、スコープ、件名などの情報が含まれている必要がありますが、基本的に同じことです。jwtを発行者に送信することで検証する組み込みのフィルターがあります(またはサービスが発行者からフェッチするjwkを使用して、追加のリクエストを行わずにjwtの整合性を検証できるようにします)。

2)資格情報の取得元を認証マネージャーで区別するにはどうすればよいですか?userRepositoryと(見つからない場合は)technicalUserRepositoryも検索する必要がありますか?

通常、異なるURLパスに対して複数のSecurityWebFilterChainsを定義します。私はWebfluxSpring Securityでこれを行っていませんが、通常のSpringアプリケーションでこれを行う方法であり、ここでは違いは見られません。あなたが何かクレイジーな習慣をしているのでなければ。

3)SecurityContextRepositoryをオーバーライドする必要がありますか?すべてのチュートリアルがそれを行いますが、そうする理由はわかりません。正確には何ですか?このソースは、「SecurityContextRepositoryは、ユーザーのユーザー名とパスワードを比較する通常のSpringSecurityで提供されるuserDetailsS​​erviceに似ています」と述べています。しかし、彼はReactiveUserDetailsS​​erviceを意味していると思います(ちなみに、UserDetailsS​​erviceもReactiveUserDetailsS​​erviceもそれを行いません。ユーザー検索のためだけです)。

ここでの答えはおそらくノーです。Spring security 4のoauth2、特にJWTのサポートが非常に悪かったことがわかります。そのため、人々は独自のJWTパーサーを作成することに慣れました。Spring Security 5が登場したとき、Springは構成して使用できるjwtフィルターを組み込みで実装しました。しかし、古いSpring Securityチュートリアルがたくさんあり、何よりも公式ドキュメントを読んでいない開発者がたくさんいます。

彼らは主にグーグルのチュートリアルをして、間違った情報を取得して、それに取り組んでいます。

しかし、簡単に説明できます。

SecurityContextRepositoryセッションベースの認証(サーバーがクライアントとのセッションを確立する)がある場合、リクエスト中にSecurityContext(セッション)をThreadLocalに保存します。ただし、リクエストが終了するとすぐに、どこかに保存しない限り、セッションは失われます。SecurityContextPersistenceFilterを使用しSecurityContextRepositoryてThreadLocalからセッションを抽出して保存します。最も一般的なのは、セッションをHttpSessionに保存することです。

AuthenticationManagerカスタム認証プロセスを実行する場合は、これをオーバーライドします。何かを検証したい場合の例、カスタムLDAP、データベースなどを呼び出します。ここで認証を実行します。ただし、ほとんどの標準ログイン(ldap、sql-servers、基本ログインなど).httpBasic()には、事前に実装されたAuthenticationManagerを取得するようなログインタイプを選択すると、事前に構築された構成可能なマネージャーが既に実装されていることに注意してください。

UserDetailsManagerカスタムUserDetailsオブジェクト(通常はプリンシパルとも呼ばれます)を作成する場合は、これをオーバーライドします。UserDetailsManagerで、データベースを検索してユーザーをフェッチしてから、UserDetailsオブジェクトをビルドして返します。

これらの2つのインターフェースは、最も通常のカスタム実装であり、基本認証/セッションベースの認証が必要な場合に使用されます。

トークンをやりたい場合は、トークンの発行者は誰ですか?通常、発行者は個別であり、すべてのサービスはトークンを取得して発行者に対して検証するだけです。

これがいくつかの質問を説明することを願っています。私はこれをバスに書いたので、おそらくいくつかのことが間違っていて、100%正しくないなどです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring WebFluxで「認証」オブジェクトを取得するにはどうすればよいですか?

分類Dev

RouterFunctionMappingを介してSpring5 webfluxに複数のRouterFunctionを登録するにはどうすればよいですか?

分類Dev

Spring Webfluxで参照URLを取得するにはどうすればよいですか?

分類Dev

spring-webflux WebClientで開くソケットの数を制限するにはどうすればよいですか?

分類Dev

Spring Webfluxで実行時にサーバーポートを取得するにはどうすればよいですか?

分類Dev

Spring WebFluxルーター関数を使用するときにモデル属性を取得するにはどうすればよいですか?

分類Dev

Spring WebFluxでJaegerを使用する方法は?

分類Dev

spring-integration:WebFlux統合フローからSpring Reactor Fluxを作成するにはどうすればよいですか?

分類Dev

Spring Security AbstractAuthenticationProcessingFilterをWebFluxに移行する

分類Dev

Spring Webfluxでの実装は「機能」しますが、「なぜ」を理解しようとしています。

分類Dev

Spring webfluxでのflatMap()とsubscribe()

分類Dev

どうすればSpringのWebFluxに応答を出させることができますか

分類Dev

合計実行時間を計算し、応答ヘッダー、つまりSpring WebFluxのすべてのリクエストのx-runtimeに設定するにはどうすればよいですか?

分類Dev

Spring Security WebFlux-認証付きの本体

分類Dev

Spring WebFluxおよびWebSocket

分類Dev

Spring Webflux Nettyhttpおよびhttps

分類Dev

Spring webflux、 `ServerResponse`のテスト

分類Dev

Spring webflux、 `ServerResponse`のテスト

分類Dev

Spring WebFluxにSpringCloudSleuthのTracingWebFillterを実装する

分類Dev

Spring WebFlux(Flux):動的に公開する方法

分類Dev

Spring WebFlux(Flux):動的に公開する方法

分類Dev

Spring 5WebfluxにはSNS + SQSを実装する独自の方法がありますか?

分類Dev

呼び出し元に応答を返すときに、Spring WebFlux WebClient要求に対する失敗した応答の本文をログアウトするにはどうすればよいですか?

分類Dev

Spring 5 webfluxにHandlerFunctionsがあるのはなぜですか?

分類Dev

SpringアプリケーションでVaadinとSpring WebFluxの両方を使用して、ルートを設定するにはどうすればよいですか?

分類Dev

Spring SecurityのLdapでSpring Boot Actuator LdapHealthIndicatorを実行するにはどうすればよいですか?

分類Dev

APIのSpring webfluxカスタム認証

分類Dev

Spring Boot 2 webflux thymeleafで現在のページのURLを取得して、cssアクティブリンクを設定するにはどうすればよいですか?

分類Dev

spring-webfluxでspring-securityを使用する場合は、WebSessionの作成を無効にします

Related 関連記事

  1. 1

    Spring WebFluxで「認証」オブジェクトを取得するにはどうすればよいですか?

  2. 2

    RouterFunctionMappingを介してSpring5 webfluxに複数のRouterFunctionを登録するにはどうすればよいですか?

  3. 3

    Spring Webfluxで参照URLを取得するにはどうすればよいですか?

  4. 4

    spring-webflux WebClientで開くソケットの数を制限するにはどうすればよいですか?

  5. 5

    Spring Webfluxで実行時にサーバーポートを取得するにはどうすればよいですか?

  6. 6

    Spring WebFluxルーター関数を使用するときにモデル属性を取得するにはどうすればよいですか?

  7. 7

    Spring WebFluxでJaegerを使用する方法は?

  8. 8

    spring-integration:WebFlux統合フローからSpring Reactor Fluxを作成するにはどうすればよいですか?

  9. 9

    Spring Security AbstractAuthenticationProcessingFilterをWebFluxに移行する

  10. 10

    Spring Webfluxでの実装は「機能」しますが、「なぜ」を理解しようとしています。

  11. 11

    Spring webfluxでのflatMap()とsubscribe()

  12. 12

    どうすればSpringのWebFluxに応答を出させることができますか

  13. 13

    合計実行時間を計算し、応答ヘッダー、つまりSpring WebFluxのすべてのリクエストのx-runtimeに設定するにはどうすればよいですか?

  14. 14

    Spring Security WebFlux-認証付きの本体

  15. 15

    Spring WebFluxおよびWebSocket

  16. 16

    Spring Webflux Nettyhttpおよびhttps

  17. 17

    Spring webflux、 `ServerResponse`のテスト

  18. 18

    Spring webflux、 `ServerResponse`のテスト

  19. 19

    Spring WebFluxにSpringCloudSleuthのTracingWebFillterを実装する

  20. 20

    Spring WebFlux(Flux):動的に公開する方法

  21. 21

    Spring WebFlux(Flux):動的に公開する方法

  22. 22

    Spring 5WebfluxにはSNS + SQSを実装する独自の方法がありますか?

  23. 23

    呼び出し元に応答を返すときに、Spring WebFlux WebClient要求に対する失敗した応答の本文をログアウトするにはどうすればよいですか?

  24. 24

    Spring 5 webfluxにHandlerFunctionsがあるのはなぜですか?

  25. 25

    SpringアプリケーションでVaadinとSpring WebFluxの両方を使用して、ルートを設定するにはどうすればよいですか?

  26. 26

    Spring SecurityのLdapでSpring Boot Actuator LdapHealthIndicatorを実行するにはどうすればよいですか?

  27. 27

    APIのSpring webfluxカスタム認証

  28. 28

    Spring Boot 2 webflux thymeleafで現在のページのURLを取得して、cssアクティブリンクを設定するにはどうすればよいですか?

  29. 29

    spring-webfluxでspring-securityを使用する場合は、WebSessionの作成を無効にします

ホットタグ

アーカイブ