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){ ... } }