以前は基本認証を使用していましたが、PingAccessを使用してフェデレーション認証に切り替える必要があります。ユーザーはすでに認証されており、ユーザー名とトークンがリクエストヘッダーで送信されます。Spring Securityを使用してユーザー名をLDAPユーザープリンシパルにリンクするにはどうすればよいですか?
したがって、実装を検討する際に考慮すべきことがいくつかあります。これは、プレイ中のピースの非常に基本的な要約です。
フィルタチェーンは通常、サーブレットとアプリの他の部分を区別するためのものです。あなたが延長したならばOncePerRequestFilter
、あなたはおそらくすでに正しい道を進んでいます。
典型的なSpringSecurityモデルに従う場合、このフィルターはAuthentication
、で認証できるオブジェクトを準備しますAuthenticationManager
。のAuthentication
ような既存の実装を試して使用するPreAuthenticatedAuthenticationToken
ことも、独自の実装を作成してそれを呼び出すこともできますJwtAuthenticationToken
。
AuthenticationManager
基本的には、Jwtトークンなどのトークンを認証できるプロバイダーのコレクションです。それらのコントラクトはサーブレットとは別であるため、もう少し柔軟性があります。
おそらくJwtAuthenticationProvider
、トークンを検証するを作成してから、を呼び出しUserDetailsService
て基になるユーザーを取得します。
Spring SecurityにはJWT専用のサポートはありませんが、Nimbusを使用するライブラリがいくつかあります。spring-security-oauth2-resource-serverのコードをチェックして、JWK SetUriを使用してJWTを検証する方法を確認できます。このライブラリはOAuthに重点を置いているため、このライブラリに依存することは望ましくありませんが、いくつかのアイデアが得られる可能性があります。
UserDetailsService
実装はバックエンドを照会し、そこからユーザーを取得する責任があります。たとえば、LdapUserDetailsService
使用できる可能性があるものがあります。
以上のことをすべて踏まえて、これが私がおそらく行うことの要約です。
JwtAuthenticationToken
jwtトークンを格納でき、SpringSecurityが検証プロセスを完了したときに認証が成功したことを表す可能性のあるオブジェクトを作成します。
JwtAuthenticationFilter
リクエストからトークンを読み取り、データを入力してJwtAuthenticationToken
、に送信するを作成しますAuthenticationManager
。
JwtAuthenticationProvider
を読み取り、JwtAuthenticationToken
検証のためにNimbus(またはAuth0またはその他のjwtライブラリ)に送信するを作成します。そのトークンをどのように信頼するかを決定する必要があります。Nimbusは、JWK Set Uriを介してリモートで、または事前構成された公開鍵または対称鍵のセットを介してローカルでチェックできます。(ここでも考えることがたくさんあります!)
を使用してLdapUserDetailsService
、解析されたサブジェクトの名前を渡します。UserDetails
戻ってくることはのためのプリンシパルとして供給することができAuthentication
、プロバイダが返すオブジェクト。
したがって、Spring Security開発モデルに従う必要はなく、できるだけ早く何かを機能させたいとしましょう。
最終的に達成する必要がある2つのことは
LdapUserDetailsService
ます。UserDetails
これはあなたを与える、あなたが構築することができAuthentication
、あなたが上で設定できるオブジェクトをSecurityContextHolder
。これは時間の経過とともにそれほど柔軟ではありませんが、少し早く始めることができるかもしれません。
あなたはこれについて尋ねなかったが、トークンがどういうわけか無効であるならば、あなたは何をするつもりなのだろうか。そのような場合は、AuthenticationEntryPoint
sとAccessDeniedHandler
sを確認することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加