spring-security-oauth2将Authentication
对象作为序列化java对象(ByteArrayOutputStream.writeObject(authentication)
)中的访问令牌条目的一部分保存。
如何处理spring-security(可能更改SpringSecurityCoreVersion.SERIAL_VERSION_UID)和spring-security-oauth(可能会更改OAuth2Authentication
的serialVersionUID)的版本升级?如果serialVersionUID发生更改,则无法再对反序列化持久化的Authentication对象。
我们得出的结论是,在升级框架版本时,删除包含序列化身份验证对象的访问令牌将是最清晰,最简单的解决方案。任何想法如何更优雅地处理这个?
答案 0 :(得分:1)
我认为最好的解决方案是丢弃令牌。 SpringSecurityCoreVersion.SERIAL_VERSION_UID
声明旁边有一个大注释:
/**
* Global Serialization value for Spring Security classes.
*
* N.B. Classes are not intended to be serializable between different versions. See
* SEC-1709 for why we still need a serial version.
*/
实际上,他们在每个次要版本上故意(至少)撞SERIAL_VERSION_UID
。
(SEC-1709的问题注释说明了他们如何解决此问题的。)
我从评论中得到的是,如果您 did 尝试透明地处理版本升级,您可能会导致事情中断,并带来不可预期的后果。 (这是可能的安全问题的“代码”。)
另一方面,OAuth2Authentication.serialVersionUID
在最近9年中似乎没有变化。