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
  • 相关阅读:
    Java:多线程
    javascript:正则表达式、一个表单验证的例子
    DOM对象和window对象
    javascript:面向对象和常见内置对象及操作
    如何检查CentOS服务器受到DDOS攻击
    CentOS防SYN攻击
    CentOS服务器简单判断CC攻击的命令
    在VMware中为CentOS配置静态ip并可访问网络
    安全运维之:网络实时流量监测工具iftop
    安全运维之:网络实时流量监测工具iftop
  • 原文地址:https://www.cnblogs.com/jsersudo/p/10055117.html
Copyright © 2011-2022 走看看