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

 

posted on 2018-02-06 10:39  肆言  阅读(385)  评论(0)    收藏  举报