18.2. 簡單雜湊 Token 方式

18.2. 簡單雜湊 Token 方式

這個方式使用雜湊來達到實用的記得我策略。簡單來說,在成功的驗證過後,一個 cookie 會被發送給瀏覽器,這個 cookie 會長得像這樣:

base64(username + ":" + expirationTime + ":" +
md5Hex(username + ":" + expirationTime + ":" password + ":" + key))

username:          可被 UserDetailsService 識別
password:          與取得的 UserDetails 相符
expirationTime:    以毫秒為單位,紀錄記得我 token 到期的日期及時間
key:               用來避免記得我 token 被修改的私有 key

這樣的記得我 token 只會依照設定的時間存活,前提是使用者名稱、密碼及 key 都不變。

要注意的是,這個機制有個安全問題,就是當記得我 token 被捕獲後,在 token 失效前,任何使用端都可以使用它,這與摘要驗證是同樣的問題。如果一個請求端取得一個 token,它就可以很容易地變更密碼,並立即讓其他記得我 token 全都失效。

所以如果你需要更加強的安全,你應該參考下一段的機制,或者根本不要使用記得我功能。

如果你對於命名空間設定還算熟悉,你可以加上 <remember-me> 元素就可以啟用記得我驗證:

<http>
    ...
    <remember-me key="myAppKey"/>
</http>

通常 UserDetailsService 會自動被選用,但如果應用程式裡有不止一個 UserDetailsService,你需要在 user-service-re 性質中註明要使用的是哪一個 UserDetailsService bean 的名稱。