基于Token实现身份验证和权限管理

一、什么是token

HTTP是一种无状态的协议,也就是HTTP没法保存客户端的信息,没办法区分每次请求的不同。

Token是服务器生成的一串字符,作为客户端请求的令牌。当第一次登陆后,服务器会分发Tonken字符串给客户端。后续的请求,客户端只需带上这个Token,服务器即可知道是该用户的访问。

使用Tonken,可以实现:权限管理、身份验证、防止同一账号异地登录。

二、Token的验证过程

客户端:用户名和密码请求登录

服务器:收到请求,验证用户名和密码,验证成功后,分发一个Token返回给客户端

客户端:将Token存储,例如放在 Cookie 里或者 Local Storage 里,后续每次请求,带上此Token

服务器:收到请求,验证Token是否正确,验证成功返回请求数据

2.1 Token的生成

String token = user.getUserid() + "-" + createStringId();
user.setToken(token);

public static String createStringId() {
    UUID uuid = UUID.randomUUID();
    return uuid.toString();
}


public final class UUID implements java.io.Serializable, Comparable<UUID> {
    public static UUID randomUUID() {
        SecureRandom ng = Holder.numberGenerator;

        byte[] randomBytes = new byte[16];
        ng.nextBytes(randomBytes);
        randomBytes[6]  &= 0x0f;  /* clear version        */
        randomBytes[6]  |= 0x40;  /* set to version 4     */
        randomBytes[8]  &= 0x3f;  /* clear variant        */
        randomBytes[8]  |= 0x80;  /* set to IETF variant  */
        return new UUID(randomBytes);
    }
}

2.2 Token实现权限管理

案例

请求加载最新供应链消息

客户端:请求接口+token

服务器:验证是否能通过token找到用户,若不能——该token不正确

                验证token是否失效,若失效——凭证已失效
                到权限表查询是否在权限内,若没有——该用户未分配资源

猜你喜欢

转载自blog.csdn.net/qq_37436998/article/details/83214963