1つのプロジェクトを開発し、Silhouette認証フレームワークを使用しています。 ブラウザのUIからの定期的なリクエストに対してはCookieAuthenticatorを使用し、REST APIリクエストに対してはJWTAuthenticatorを使用します。オーセンティケータDAOがある場合シルエットJWTトークンはステートレスモードでどのように有効ですか?
/**
* The service that handles the JWT authenticator.
*
* If the authenticator DAO is deactivated then a stateless approach will be used. But note
* that you will loose the possibility to invalidate a JWT.
*
* @param settings The authenticator settings.
* @param dao The DAO to store the authenticator. Set it to None to use a stateless approach.
* @param idGenerator The ID generator used to create the authenticator ID.
* @param clock The clock implementation.
* @param executionContext The execution context to handle the asynchronous operations.
*/
class JWTAuthenticatorService(
settings: JWTAuthenticatorSettings,
dao: Option[AuthenticatorDAO[JWTAuthenticator]],
idGenerator: IDGenerator,
clock: Clock)(implicit val executionContext: ExecutionContext)
extends AuthenticatorService[JWTAuthenticator]
with Logger {
お知らせDOC
のこの部分:ここで は、私は完全にこの事が実際にどのように動作するか理解していない感じさせるドキュメントとシルエットのソースコードの一部であり、非アクティブ化された場合は、ステートレスな方法で を使用します。ただし、JWTを に無効にする可能性が失われることに注意してください。
したがって、彼らは言うとおり正確に動作します。 パラメータの値としてNone
を渡すと、アプリケーションをシャットダウンしても生成されたトークンが有効なままになります。しかし、これらのトークンがどのように有効であるかを裏づけ店なしでは?私は再びアプリケーションを起動し、同じトークンを使用すると、ユーザーを認証します。そして、私はそれがどのようにこれを行うのか分かりません。あなたは説明できますか?
非常に簡単です。トークンの内容を既知のソルトとアルゴリズムのコンボでエンコードします。 JWTトークンは、HMACまたはRSAでコード化された既知の構造を持っています。サーバは、例えば、暗号化キー(HMACの秘密鍵)とRSAの鍵ペアを知っている限り、トークンをステートレスに復号化することができます。 – flavian
私はちょっと考えていれば、トークンにリンクされたアカウントに関する情報が埋め込まれているはずです。 サーバーがトークンを簡単に解読できるという事実は私にとっては単純ではありませんでした。 私はそれを受け入れることができるように答えとしてあなたのコメントを入れていただけますか? –