问题
后端提供的RestFul API一般都需要进行权限验证,而Web框架一般采用Cookies+Session来进行认证。但RestFul API属于无状态协议,而在后台使用Session的话,由于Session本身需要服务端进行维持,这样就破坏了Rest的无状态性。
解决方案
抛弃Cookie+Session的认证架构,选用Token作为认证手段。在登录验证时,后台收集账号信息、IP、访问时间等信息,生成对应Token,通过cookies传回客户端。之后的每次请求API,都需要带上Token;后台对Token进行解码与鉴权操作。这样就可以在服务端本身不维护登录状态的情况下,进行权限认证,不会破坏RestFul的特性。
Java Web 示例
由于Web后台框架是SpringMVC,这里选择使用JWT作为Token生成工具。
编写一个Token生成工具类,完成两个方法:Token生成以及Token验证。
package com.example.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 用于JWT Token的生成与解码验证
*/
public class JwtTokenUtils {
// 加密用的私钥
private static String TOKEN_KEY = "keys";
/**
* 生成返回给客户端的token
* @param username 登录用户名
* @