Acess Token
访问资源接口(API)时所需要的资源凭证
简单token 的组成: uid(用户唯一的身份标识) 、time (当前时间的时间戳) ,sign(签名,token的前几位以hash算法压缩成的一定长度的16进制字符串)
特点:
服务端无状态变化、可扩展性好
支持移动端设备
安全
支持跨域程序调用
token 的身份验证流程
/** * * @param tokenBody 实例对象,通常为bean * @param minute 过期时间 单位:min * @param <T> * @return */ public static <T> String createToken(T tokenBody, int minute) { long now = System.currentTimeMillis() / 1000; Gson gson = new Gson(); JsonObject jsonBody = new JsonObject(); jsonBody.addProperty("body", gson.toJson(tokenBody)); String randomAlphabetic = RandomStringUtils.randomAlphabetic(3); JsonObject jsonHeader = new JsonObject(); jsonHeader.addProperty("now", now); jsonHeader.addProperty("rand_num", randomAlphabetic); jsonHeader.addProperty("expire", (now + minute * 60)); String token = null; try { byte[] encryptContent = generateEncryptBody(jsonHeader.toString(), jsonHeader.toString()); byte[] signWithEncrypt = generateSignWithEncrypt(encryptContent); token = Joiner.on(".").join(new String[]{base64Encoder( jsonHeader.toString().getBytes("utf-8")), base64Encoder(encryptContent), base64Encoder(signWithEncrypt)} ); } catch (Exception e) { e.printStackTrace(); } return token; }
区别
标签内显示空格——空格实体