zoukankan      html  css  js  c++  java
  • JWT

    头部:描述JWT的最基本信息,比如类型以及签名所用到的算法等,可以表示成一个json对象。
    载荷:就是自定义的数据,(标准中注册的声明,公共的声明,私有的声明)一般存储用户id过期时间等,也是JWT核心,这些数据就是使后端知道此token是哪个用户登陆的凭证,由前端发送数据的时候在请求头内携带,
    所以后端几乎不需要保存任何数据。
    签名:1、头部和载荷各自使用base64编码后用.连接起来,形成token的前两段。
    2、前两段加入一个密钥用HS256或者其他加密算法形成第三段token。密钥secret是保存在服务端的,服务端会根据这个密钥进行生成token和验证,所以需要保护好。
    https://www.jianshu.com/p/75208a68c3b9
     
    cookie+session这种模式通常是保存在内存中,而且服务从单服务到多服务会面临的session共享问题,随着用户量的增多,开销就会越大。
    而JWT不是这样的,只需要服务端生成token,客户端保存这个token,每次请求携带这个token,服务端认证解析就可。
    放在 HTTP 请求的头信息Authorization字段里面
    JWT 的几个特点
    (1)JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
    (2)JWT 不加密的情况下,不能将秘密数据写入 JWT。
    (3)JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
    (4)JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
    (5)JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令×××的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
    (6)为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。
     
    JWT可能会出现跨域问题,解决代码:
    @Configuration
    public class CorsConfig {
    
        @Bean
        public FilterRegistrationBean corsFilter() {
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            CorsConfiguration config = new CorsConfiguration();
            config.setAllowCredentials(true);
            config.addAllowedOrigin("*");
            config.addAllowedHeader("*");
            config.addAllowedMethod("OPTIONS");
            config.addAllowedMethod("HEAD");
            config.addAllowedMethod("GET");
            config.addAllowedMethod("PUT");
            config.addAllowedMethod("POST");
            config.addAllowedMethod("DELETE");
            config.addAllowedMethod("PATCH");
            source.registerCorsConfiguration("/**", config);
            final FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
            bean.setOrder(0);
            return bean;
        }
    
        @Bean
        public WebMvcConfigurer mvcConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/**").allowedMethods("GET", "PUT", "POST", "GET", "OPTIONS");
                }
            };
        }
    }
    springboot使用JWT验证登陆:
    https://segmentfault.com/a/1190000012874052
  • 相关阅读:
    HDU 1847 Good Luck in CET-4 Everybody! (博弈)
    HDU 1242 Rescue (BFS+优先队列)
    POJ 1061 青蛙的约会(扩展欧几里德算法)
    UVa 1610 Party Games(思维)
    hdu 1025LIS思路同1257 二分求LIS
    hdu 1257 LIS (略坑5
    什么是可串行化MVCC
    老板又出难题,气得我写了个自动化软件
    opencv学习一:概述与环境搭建(python3.7+pycharm)
    人工智能能力提升指导总结
  • 原文地址:https://www.cnblogs.com/jsersudo/p/10055117.html
Copyright © 2011-2022 走看看