前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jwt认证方式多种

Jwt认证方式多种

原创
作者头像
JQ实验室
发布2023-01-13 09:54:06
4820
发布2023-01-13 09:54:06
举报
文章被收录于专栏:实用技术实用技术
什么是JWT

JWT全称是JSON Web Token,

官网地址直达

JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输

JWT认证的一般流程

在实际的SpringBoot项目中,一般流程大概是:

前端请求后端,获取后端生成的随机token作为JWT的payload生成JWT字符串返回给前端

前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串

后端定义一个拦截器,每次收到前端请求时,取出JWT字符串并进行验证,验证通过后解析出payload中用户信息;

这里说一下 jwt认证中拦截器一般应该支持三种方式:
  • 将jwt放到url参数上: 前端请求时,将jwt参数放到url上,后台过滤器从url参数上获取指定key的值,然后验证是否合法; 此方法对调用方最是友好;

下面是调用的伪代码:

代码语言:java
复制
  Map<String,Object> map = new HashMap<>();
        map.put("_jwt",token);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        // headers.set(HttpHeaders.AUTHORIZATION,"Bearer " +token);
        // headers.set(HttpHeaders.COOKIE,"_jwt=" +token);
        Map<String, Object> result = template.getWithUrlParam(
            sphere_url +"/getinfo?_jwt={_jwt}"
            ,map,headers);
        System.out.println(result);
  • 将jwt字符串放置到cookie中:

在验证凭据放置到cookie中,然后调用时,拦截器获取cookie中的信息并验证;

此方法类似于session验证,对于老系统改造比较合适

伪代码如下:

代码语言:java
复制
 public Map<String, Object> getWithUrlParam(String url, Map<String, Object> json,HttpHeaders headers) {
        HttpEntity<?> requestEntity = new HttpEntity<>(headers);
        ResponseEntity<String> exchange = this.restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class,json);
        return MapUtil.readValueAsMap(exchange.getBody());
    }
  • 将jwt字符串放到header的Authorization中

后台拦截器从header中获取信息;

此方法最常见,主要用于前后端分离项目,已经app调用等

调用的伪代码如下:

代码语言:java
复制
    public Map<String, Object> postWithBodyAndUrlParam(String url, Map<String, Object> json,Map<String, Object> urlParam,,HttpHeaders headers) {
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(json, headers);
        ResponseEntity<String> exchange = this.restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class,urlParam);
        return MapUtil.readValueAsMap(exchange.getBody());
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是JWT
  • JWT认证的一般流程
  • 这里说一下 jwt认证中拦截器一般应该支持三种方式:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档