ヘッダーで渡されたpingアクセスとユーザー名を使用してSpringセキュリティを使用して事前認証されたLDAPユーザーを認証するにはどうすればよいですか?

Vibhav agaskar

以前は基本認証を使用していましたが、PingAccessを使用してフェデレーション認証に切り替える必要があります。ユーザーはすでに認証されており、ユーザー名とトークンがリクエストヘッダーで送信されます。Spring Securityを使用してユーザー名をLDAPユーザープリンシパルにリンクするにはどうすればよいですか?

jzheaux

したがって、実装を検討する際に考慮すべきことがいくつかあります。これは、プレイ中のピースの非常に基本的な要約です。

フィルターチェーン

フィルタチェーンは通常、サーブレットとアプリの他の部分を区別するためのものです。あなたが延長したならばOncePerRequestFilter、あなたはおそらくすでに正しい道を進んでいます。

典型的なSpringSecurityモデルに従う場合、このフィルターはAuthentication、で認証できるオブジェクトを準備しますAuthenticationManagerAuthenticationような既存の実装を試して使用するPreAuthenticatedAuthenticationTokenことも、独自の実装を作成してそれを呼び出すこともできますJwtAuthenticationToken

認証マネージャー

AuthenticationManager基本的には、Jwtトークンなどのトークンを認証できるプロバイダーのコレクションです。それらのコントラクトはサーブレットとは別であるため、もう少し柔軟性があります。

おそらくJwtAuthenticationProvider、トークンを検証する作成してから、を呼び出しUserDetailsServiceて基になるユーザーを取得します。

Spring SecurityにはJWT専用のサポートはありませんが、Nimbusを使用するライブラリがいくつかあります。spring-security-oauth2-resource-serverのコードをチェックして、JWK SetUriを使用してJWTを検証する方法を確認できます。このライブラリはOAuthに重点を置いているため、このライブラリに依存することは望ましくありませんが、いくつかのアイデアが得られる可能性があります。

ユーザー詳細サービス

UserDetailsService実装はバックエンドを照会し、そこからユーザーを取得する責任があります。たとえば、LdapUserDetailsService使用できる可能性あるものがあります。

概要

以上のことをすべて踏まえて、これが私がおそらく行うことの要約です。

  1. JwtAuthenticationTokenjwtトークンを格納でき、SpringSecurityが検証プロセスを完了したときに認証が成功したことを表す可能性のあるオブジェクトを作成します。

  2. JwtAuthenticationFilterリクエストからトークンを読み取り、データを入力してJwtAuthenticationToken、に送信するを作成しますAuthenticationManager

  3. JwtAuthenticationProviderを読み取り、JwtAuthenticationToken検証のためにNimbus(またはAuth0またはその他のjwtライブラリ)に送信するを作成しますそのトークンをどのように信頼するかを決定する必要があります。Nimbusは、JWK Set Uriを介してリモートで、または事前構成された公開鍵または対称鍵のセットを介してローカルでチェックできます。(ここでも考えることがたくさんあります!)

  4. を使用してLdapUserDetailsService、解析されたサブジェクトの名前を渡します。UserDetails戻ってくることはのためのプリンシパルとして供給することができAuthentication、プロバイダが返すオブジェクト。

代替案

したがって、Spring Security開発モデルに従う必要はなく、できるだけ早く何かを機能させたいとしましょう。

最終的に達成する必要がある2つのことは

  1. トークンが有効かどうかを判断します。Spring SecurityはまだこれをOAuth2なしでサポートしていないため、Nimbusなどを使用して独自にロールする必要があります。
  2. を構成して呼び出しLdapUserDetailsServiceます。UserDetailsこれはあなたを与える、あなたが構築することができAuthentication、あなたが上で設定できるオブジェクトをSecurityContextHolder

これは時間の経過とともにそれほど柔軟ではありませんが、少し早く始めることができるかもしれません。

考えるべき他の事柄

あなたはこれについて尋ねなかったが、トークンがどういうわけか無効であるならば、あなたは何をするつもりなのだろうか。そのような場合は、AuthenticationEntryPointsとAccessDeniedHandlersを確認することをお勧めします

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

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

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ