token的安全是極度重要的
1:token的唯一性,
它代表著來自某應用系統用戶的一次成功登錄。我們可以利用java util包工具直接生成一個32位唯一字符串來實現。
String token = UUID.randomUUID().toString();
同時,我們定義一個javabean, TokenInfo 來承載token所表示的具體內容,即某個應用系統來的某個用戶本次通過了認證中心
public class TokenInfo { private int userId; //用戶唯一標識ID private String username; //用戶登錄名 private String ssoClient; //來自登錄請求的某應用系統標識 private String globalId; //本次登錄成功的全局會話sessionId ... }
token和tokenInfo形成了一個<key,value>形式的鍵值對,后續應用系統向認證中心驗證token時還會用到。
2:
token存在的有效期間不能過長,這是出于安全的角度,例如token生存最大時長為60秒。
我們可以直接利用redis特性來實現這一功能。redis本質就是<key,value>鍵值對形式的內存數據庫,并且這個鍵值對可以設置有效時長。
3
token只能使用一次,用完即作廢,不能重復使用。這也是保證系統安全性。
我們可以定義一個TokenUtil工具類,來實現<token,tokenInfo>鍵值對在redis中的操作,主要接口如下:
public class TokenUtil { ... // 存儲臨時令牌到redis中,存活期60秒 public static void setToken(String tokenId, TokenInfo tokenInfo){ ... } //根據token鍵取TokenInfo public static TokenInfo getToken(String tokenId){ ... } //刪除某個 token鍵值 public static void delToken(String tokenId){ ... } }
?