我正在开发一个项目并使用Silhouette身份验证框架。对于来自浏览器 UI 的常规请求,我使用 CookieAuthenticator,对于 REST API 请求,我使用 JWTAuthenticator。这是带有文档的部分剪影源代码,这让我觉得我不完全理解这个东西是如何工作的:
/**
* 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 {
请注意文档的这一部分
如果验证器 DAO 被停用,则将使用无状态方法。但请注意 * 您将失去使 JWT 无效的可能性。
所以它正如他们所说的那样工作。None
当我作为参数的值传递时,dao
即使我关闭了应用程序,生成的令牌也会保持有效。但是如果没有后备存储,这些令牌如何保持有效?当我再次启动应用程序并使用相同的令牌时,它会对用户进行身份验证。我不知道它是怎么做到的。你能解释一下吗?