クラス KeyBasedPersistenceTokenService
- 実装されたすべてのインターフェース:
org.springframework.beans.factory.InitializingBean
,TokenService
TokenService
の基本的な実装。キーは次の形式で作成されます。
Base64(creationTime + ":" + 16 進数 (pseudoRandomNumber) + ":" + extendedInformation + ":" + Sha512Hex(creationTime + ":" + 16 進数 (pseudoRandomNumber) + ":" + extendedInformation + ":" + serverSecret) )
上記では、creationTime
、tokenKey
、extendedInformation
は Token
に格納されているものと同じです。Sha512Hex
には、同じペイロードに加えて serverSecret
が含まれています。
serverSecret
はミリ秒ごとに変化します。これは、2 つの静的なサーバー側の秘密に依存しています。1 つ目はパスワードで、2 つ目はサーバー整数です。発行されたキーが後で認識されるためには、これらの両方が同じままである必要があります。ミリ秒単位で適用可能な serverSecret
は、password
+ ":" +(creationTime
% serverInteger
)によって計算されます。このアプローチは、実際のサーバーシークレットをさらに難読化し、サーバーシークレットの計算の試みの有用性をさらに制限します(偽のトークンは、計算されたハッシュと等しい creationTime
を持つように強制されるため)。トークンサービスに依存するフレームワーク機能は、いずれにしても比較的古いトークンを拒否する必要があることを思い出してください。
このクラスのさらなる考慮事項は、暗号的に強い疑似乱数の要件です。この目的のために、プロパティを注入するために SecureRandomFactoryBean
の使用をお勧めします。
この実装では、文字列操作に内部的に UTF-8 エンコーディングを使用します。
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明void
allocateToken
(StringSE extendedInformation) 新しいToken
の割り当てを強制します。void
setPseudoRandomNumberBytes
(int pseudoRandomNumberBytes) void
setSecureRandom
(SecureRandomSE secureRandom) void
setServerInteger
(IntegerSE serverInteger) void
setServerSecret
(StringSE serverSecret) verifyToken
(StringSE key)
コンストラクターの詳細
KeyBasedPersistenceTokenService
public KeyBasedPersistenceTokenService()
メソッドの詳細
allocateToken
インターフェースからコピーされた説明:TokenService
新しいToken
の割り当てを強制します。- 次で指定:
- インターフェース
TokenService
のallocateToken
- パラメーター:
extendedInformation
- トークンに必要な拡張情報 (null
にすることはできませんが、空にすることはできます)- 戻り値:
- 以前に発行されたことがなく、将来この実装の
TokenService.verifyToken(String)
によって認識されることが保証されている新しいトークン。
verifyToken
インターフェースからコピーされた説明:TokenService
- 次で指定:
- インターフェース
TokenService
のverifyToken
- パラメーター:
key
-Token.getKey()
から取得され、この実装によって作成されたもの- 戻り値:
- トークン、またはトークンがこの
TokenService
によって発行されなかった場合はnull
setServerSecret
- パラメーター:
serverSecret
- 新しいシークレット。必要に応じて ":" を含めることができます (クライアントに送信されることはありません)
setSecureRandom
setPseudoRandomNumberBytes
public void setPseudoRandomNumberBytes(int pseudoRandomNumberBytes) - パラメーター:
pseudoRandomNumberBytes
- 発行されたバイト数を変更します (> = 0 でなければなりません。デフォルトは 256 です)
setServerInteger
afterPropertiesSet
public void afterPropertiesSet()- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet