登录验证

用户登录验证

用户输入用户名和密码,发送给服务器。

服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。

后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。

一旦用户退出登录,只需要客户端销毁token即可,服务器端不需要任何操作。

优缺点:

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。jwt长度较小,且可以使用URL传输(URLsafe)。

验证token的过程其实跟重新生成一个token的过程是一样的

/** 生产 token */
public static String generateToken(Map<String, Object> claimMaps) {

    if (null != claimMaps) {
        claimMaps.forEach((key, val) -> {
            claimMaps.put(key, val.toString());
        });
    }

    return Jwts.builder()
            // JWT_ID,可用于每次签名唯一识别
            .setId(UUID.randomUUID().toString())
            // 数据压缩方式
            .compressWith(CompressionCodecs.GZIP)
            // 签发者信息
            .setIssuer(ISSUER)
            // 说明
            .setSubject("system")
            //接收用户
            .setAudience(AUDIENCE)
            // 签发时间
            .setIssuedAt(new Date(System.currentTimeMillis()))
            // 过期时间戳
            .setExpiration(new Date(System.currentTimeMillis() + EXPIRES_IN * 1000))
            // claim信息,自定义载荷
            .addClaims(claimMaps)
            // 签名算法以+密匙
            .signWith(SIGNATURE_ALGORITHM, secretKey)
            .compact();
}

根据传递过来的header、payload以及服务端存储的密钥,重新生成一个token对比,如果token相同,那么标志token有效,没被修改。同时如果token没被修改,还可以进一步同bease64解密payload,然后根据payload中的exp有效期信息,判断token是否已经过期

å\u009c¨è¿\u0099é\u0087\u008cæ\u008f\u0092å\u0085¥å\u009b¾ç\u0089\u0087æ\u008f\u008fè¿°

JWT可以同时使用在web环境和RESTfull的接口。 缺点是无法作废已颁布的令牌/不易应对数据过期。

输入用户名和密码,发送给服务器。

服务器验证用户名和密码,正确的话就返回一个签名过的token(token 可以认为就是个长长的字符串),浏览器客户端拿到这个token。

后续每次请求中,浏览器会把token作为http header发送给服务器,服务器验证签名是否有效,如果有效那么认证就成功,可以返回客户端需要的数据。

一旦用户退出登录,只需要客户端销毁token即可,服务器端不需要任何操作。

优缺点:

JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。jwt长度较小,且可以使用URL传输(URLsafe)。

验证token的过程其实跟重新生成一个token的过程是一样的

根据传递过来的header、payload以及服务端存储的密钥,重新生成一个token对比,如果token相同,那么标志token有效,没被修改。同时如果token没被修改,还可以进一步同bease64解密payload,然后根据payload中的exp有效期信息,判断token是否已经过期

JWT可以同时使用在web环境和RESTfull的接口。 缺点是无法作废已颁布的令牌/不易应对数据过期。

1、 JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权 限,一旦JWT签发,在有效期内将会一直有效。2、JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。3、为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行 传输。4、JWT不仅可用于认证,还可用于信息交换,善用JWT有助于减少服务器请求数据库的次数。

单点登陆

无法放开首页

支持跨域

springSession

支持父域,服务器端无法进行清除