クラス TokenBasedRememberMeServices
- java.lang.Object
-
- org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices
-
- org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices
- 実装されたすべてのインターフェース:
org.springframework.beans.factory.Aware
、org.springframework.beans.factory.InitializingBean
、org.springframework.context.MessageSourceAware
、LogoutHandler
、RememberMeServices
public class TokenBasedRememberMeServices extends AbstractRememberMeServices
以前に記憶したユーザーを Base-64 エンコード Cookie で識別します。この実装は外部データベースに依存しないため、単純なアプリケーションにとって魅力的です。Cookie は、最後の
AbstractRememberMeServices.loginSuccess(HttpServletRequest, HttpServletResponse, Authentication)
の日付から特定の期間有効です。インターフェース規約に従って、このメソッドは、プリンシパルが対話型認証に成功した場合にのみ呼び出されます。そのため、この期間は、資格情報を提供した最後の認証試行から始まります。remember-me を介して最後にログインした期間ではありません。実装は、AbstractRememberMeServices.setParameter(String)
によって定義されたパラメーターが存在する場合にのみ、remember-me トークンを送信します。この実装には
UserDetailsService
が必要です。これにより、返されるUserDetails
から有効なAuthentication
を構築できます。これは、ユーザーのパスワードが使用可能であり、エンコードされた Cookie の一部として確認できるようにするためにも必要です。この実装によってエンコードされた Cookie は、次の形式を採用しています。
username + ":" + expiryTime + ":" + algorithmName + ":" + algorithmHex(username + ":" + expiryTime + ":" + password + ":" + key)
この実装では、
encodingAlgorithm
で構成されたアルゴリズムを使用して署名をエンコードします。algorithmName
から取得したアルゴリズムを使用して署名を検証しようとします。ただし、algorithmName
が Cookie 値に存在しない場合は、matchingAlgorithm
で構成されたアルゴリズムを使用して署名が検証されます。これにより、ユーザーは、algorithmName
が存在しない場合でも古いアルゴリズムを検証しながら、別のエンコードアルゴリズムに安全にアップグレードできます。そのため、ユーザーがパスワードを変更すると、remember-me トークンは無効になります。同様に、システム管理者は、キーを変更することにより、課題となっているすべての remember-me トークンを無効にすることができます。これは、パブリックマシン(キオスクシステム、インターネットカフェなど)に残された記憶ミートークンから回復するためのいくつかの合理的なアプローチを提供します。最も重要なことは、ユーザーのパスワードがユーザーエージェントに送信されることは決してなく、重要なセキュリティ保護を提供することです。残念ながら、この実装ではユーザー名が必要です(remember-me サービスをデータベースに依存したくないため)。高度なセキュリティアプリケーションは、有効なユーザー名のこの時々の望ましくない開示に注意する必要があります。
これは、多くのアプリケーションに適した基本的な remember-me 実装です。ただし、より安全な記憶方式のアプローチが必要な場合は、データベースベースの実装をお勧めします(
PersistentTokenBasedRememberMeServices
を参照)。デフォルトでは、トークンは最後に成功した認証試行から 14 日間有効です。これは
AbstractRememberMeServices.setTokenValiditySeconds(int)
を使用して変更できます。この値が 0 未満の場合、expiryTime は 14 日間のままですが、Cookie の maxAge プロパティには負の値が使用され、ブラウザーが閉じられると保存されなくなります。
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 クラス 説明 static class
TokenBasedRememberMeServices.RememberMeTokenAlgorithm
フィールドサマリー
クラス org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices から継承されたフィールド
DEFAULT_PARAMETER, logger, messages, SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY, TWO_WEEKS_S
コンストラクターのサマリー
コンストラクター コンストラクター 説明 TokenBasedRememberMeServices(java.lang.String key, UserDetailsService userDetailsService)
TokenBasedRememberMeServices(java.lang.String key, UserDetailsService userDetailsService, TokenBasedRememberMeServices.RememberMeTokenAlgorithm encodingAlgorithm)
提供されたパラメーターを使用してインスタンスを構築します
メソッドのサマリー
すべてのメソッド インスタンスメソッド 具象メソッド 修飾子と型 メソッド 説明 protected int
calculateLoginLifetime(javax.servlet.http.HttpServletRequest request, Authentication authentication)
新しく生成された remember-me ログインの有効期間を秒単位で計算します。protected boolean
isTokenExpired(long tokenExpiryTime)
protected java.lang.String
makeTokenSignature(long tokenExpiryTime, java.lang.String username, java.lang.String password)
Cookie に入れるデジタル署名を計算します。protected java.lang.String
makeTokenSignature(long tokenExpiryTime, java.lang.String username, java.lang.String password, TokenBasedRememberMeServices.RememberMeTokenAlgorithm algorithm)
Cookie に入れるデジタル署名を計算します。void
onLoginSuccess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication successfulAuthentication)
Remember-Me ログインがリクエストされたときに loginSuccess から呼び出されます。protected UserDetails
processAutoLoginCookie(java.lang.String[] cookieTokens, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
送信された永続ログイン Cookie を処理するために autoLogin から呼び出されます。protected java.lang.String
retrievePassword(Authentication authentication)
protected java.lang.String
retrieveUserName(Authentication authentication)
void
setMatchingAlgorithm(TokenBasedRememberMeServices.RememberMeTokenAlgorithm matchingAlgorithm)
トークン署名の照合に使用するアルゴリズムを設定しますクラス org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices から継承されたメソッド
afterPropertiesSet, autoLogin, cancelCookie, createSuccessfulAuthentication, decodeCookie, encodeCookie, extractRememberMeCookie, getAuthenticationDetailsSource, getCookieName, getKey, getParameter, getTokenValiditySeconds, getUserDetailsService, loginFail, loginSuccess, logout, onLoginFail, rememberMeRequested, setAlwaysRemember, setAuthenticationDetailsSource, setAuthoritiesMapper, setCookie, setCookieDomain, setCookieName, setMessageSource, setParameter, setTokenValiditySeconds, setUserDetailsChecker, setUseSecureCookie
コンストラクターの詳細
TokenBasedRememberMeServices
public TokenBasedRememberMeServices(java.lang.String key, UserDetailsService userDetailsService)
TokenBasedRememberMeServices
public TokenBasedRememberMeServices(java.lang.String key, UserDetailsService userDetailsService, TokenBasedRememberMeServices.RememberMeTokenAlgorithm encodingAlgorithm)
提供されたパラメーターを使用してインスタンスを構築します- パラメーター:
key
- 署名鍵userDetailsService
-UserDetailsService
encodingAlgorithm
- 署名のエンコードに使用されるTokenBasedRememberMeServices.RememberMeTokenAlgorithm
- 導入:
- 5.8
メソッドの詳細
processAutoLoginCookie
protected UserDetails processAutoLoginCookie(java.lang.String[] cookieTokens, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
クラスからコピーされた説明:AbstractRememberMeServices
送信された永続的なログインクッキーを処理するために autoLogin から呼び出されます。サブクラスはクッキーを検証し、必要な追加の管理を実行する必要があります。- 次で指定:
- クラス
AbstractRememberMeServices
のprocessAutoLoginCookie
- パラメーター:
cookieTokens
- デコードおよびトークン化された Cookie 値request
- リクエストresponse
- 必要に応じて Cookie を変更できるようにするレスポンス。- 戻り値:
- Cookie が正常に検証された場合、対応するユーザーアカウントの UserDetails。
makeTokenSignature
protected java.lang.String makeTokenSignature(long tokenExpiryTime, java.lang.String username, java.lang.String password)
Cookie に入れるデジタル署名を計算します。デフォルト値はencodingAlgorithm
に適用されます (「ユーザー名: tokenExpiryTime: パスワード: キー」)
makeTokenSignature
protected java.lang.String makeTokenSignature(long tokenExpiryTime, java.lang.String username, java.lang.String password, TokenBasedRememberMeServices.RememberMeTokenAlgorithm algorithm)
Cookie に入れるデジタル署名を計算します。- 導入:
- 5.8
isTokenExpired
protected boolean isTokenExpired(long tokenExpiryTime)
onLoginSuccess
public void onLoginSuccess(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication successfulAuthentication)
クラスからコピーされた説明:AbstractRememberMeServices
Remember-Me ログインがリクエストされたときに loginSuccess から呼び出されます。通常、サブクラスによって実装され、Remember-Me Cookie を設定し、実装で必要な場合はその記録を保存します。- 次で指定:
- クラス
AbstractRememberMeServices
のonLoginSuccess
setMatchingAlgorithm
public void setMatchingAlgorithm(TokenBasedRememberMeServices.RememberMeTokenAlgorithm matchingAlgorithm)
トークン署名の照合に使用するアルゴリズムを設定します- パラメーター:
matchingAlgorithm
- マッチングアルゴリズム- 導入:
- 5.8
calculateLoginLifetime
protected int calculateLoginLifetime(javax.servlet.http.HttpServletRequest request, Authentication authentication)
新しく生成された Remember-Me ログインの有効期間を秒単位で計算します。この期間 (現在の時刻から) が経過すると、Remember-Me ログインは期限切れとみなされます。このメソッドでは、ログインで提供されるリクエストパラメーターまたは Authentication オブジェクト内の情報に基づいてカスタマイズできます。デフォルト値は、トークンの有効期間プロパティ tokenValiditySeconds のみです。返された値は、トークンの有効期限を計算するために使用され、Cookie の maxAge プロパティを設定するためにも使用されます。
SEC-485 を参照してください。
- パラメーター:
request
- リクエストは onLoginSuccess に渡されましたauthentication
- 成功した認証オブジェクト。- 戻り値:
- 秒単位の寿命。
retrieveUserName
protected java.lang.String retrieveUserName(Authentication authentication)
retrievePassword
protected java.lang.String retrievePassword(Authentication authentication)