クラス KeyBasedPersistenceTokenService

java.lang.ObjectSE
org.springframework.security.core.token.KeyBasedPersistenceTokenService
実装されたすべてのインターフェース:
org.springframework.beans.factory.InitializingBeanTokenService

public class KeyBasedPersistenceTokenService extends ObjectSE implements TokenService, org.springframework.beans.factory.InitializingBean
データベースの永続性を必要とせずに、クラスターと互換性があり、マシンを再起動しても、TokenService の基本的な実装。

キーは次の形式で作成されます。

Base64(creationTime + ":" + hex(pseudoRandomNumber)+ ":" + extendedInformation + ":" + Sha512Hex(creationTime + ":" + hex(pseudoRandomNumber)+ ":" + extendedInformation + ":" + serverSecret))

上記では、creationTimetokenKeyextendedInformation は Token に格納されているものと同じです。Sha512Hex には、同じペイロードに加えて serverSecret が含まれています。

serverSecret はミリ秒ごとに変化します。これは、2 つの静的なサーバー側のシークレットに依存しています。1 つ目はパスワードで、2 つ目はサーバー整数です。発行されたキーが後で認識されるためには、これらの両方が同じままである必要があります。ミリ秒単位で適用可能な serverSecret は、password + ":" +(creationTime % serverInteger)によって計算されます。このアプローチは、実際のサーバーシークレットをさらに難読化し、サーバーシークレットの計算の試みの有用性をさらに制限します(偽のトークンは、計算されたハッシュと等しい creationTime を持つように強制されるため)。トークンサービスに依存するフレームワーク機能は、いずれにしても比較的古いトークンを拒否する必要があることを思い出してください。

このクラスのさらなる考慮事項は、暗号的に強い疑似乱数の要件です。この目的のために、プロパティを注入するために SecureRandomFactoryBean の使用をお勧めします。

この実装では、文字列操作に内部的に UTF-8 エンコーディングを使用します。

  • コンストラクターの詳細

    • KeyBasedPersistenceTokenService

      public KeyBasedPersistenceTokenService()
  • メソッドの詳細

    • allocateToken

      public Token allocateToken(StringSE extendedInformation)
      インターフェースからコピーされた説明: TokenService
      新しい Token の割り当てを強制します。
      次で指定:
      インターフェース TokenServiceallocateToken 
      パラメーター:
      extendedInformation - トークンに必要な拡張情報 (null にすることはできませんが、空にすることはできます)
      戻り値:
      以前に発行されたことがなく、将来この実装の TokenService.verifyToken(String) によって認識されることが保証されている新しいトークン。
    • verifyToken

      public Token verifyToken(StringSE key)
      インターフェースからコピーされた説明: TokenService
      Token.getKey() がこの TokenService によって発行された検証を許可し、対応する Token を再構築します。
      次で指定:
      インターフェース TokenServiceverifyToken 
      パラメーター:
      key - Token.getKey() から取得され、この実装によって作成されたもの
      戻り値:
      トークン、またはトークンがこの TokenService によって発行されなかった場合は null 
    • setServerSecret

      public void setServerSecret(StringSE serverSecret)
      パラメーター:
      serverSecret - 新しいシークレット。必要に応じて ":" を含めることができます (クライアントに送信されることはありません)
    • setSecureRandom

      public void setSecureRandom(SecureRandomSE secureRandom)
    • setPseudoRandomNumberBytes

      public void setPseudoRandomNumberBytes(int pseudoRandomNumberBytes)
      パラメーター:
      pseudoRandomNumberBytes - 発行されたバイト数を変更します (> = 0 でなければなりません。デフォルトは 256 です)
    • setServerInteger

      public void setServerInteger(IntegerSE serverInteger)
    • afterPropertiesSet

      public void afterPropertiesSet()
      次で指定:
      インターフェース org.springframework.beans.factory.InitializingBeanafterPropertiesSet