基于jwt的 Token Auth 认证方式的基本使用

WEB 安全认证方式介绍+Spring Security 入门案例 WEB 安全认证 Http Basic Auth Http Basic Auth 就是简单的访问API的时候,带上访问的username和password,由于信息会暴露出去,我们会在请求头中看到多出的用Base64 加密的一串字符。为自己的访问凭证。但安全程度过低。 案例:在Tomcat中配置Http Basic Auth 修改tomcat的conf目录下的tomcat-user.xml文件 <?xml version='1.0' encoding='utf-8'?> <tomc 阅读详情

1.jwt简介

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的 信息。在Java世界中通过JJWT实现JWT创建和验证。 

2.jjwt的入门使用

2.1token的创建和解析

2.1.1引入依赖

<dependency>
    <groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt</artifactId>
	<version>0.7.0</version>
</dependency>

2.2.2编写代码生成token

public static void main(String[] args) {
		JwtBuilder builder= Jwts.builder()
				.setId("1")
				.setSubject("admin")
				.setIssuedAt(new Date())
				//指定签名加密类型和密钥
				.signWith(SignatureAlgorithm.HS256,"123456");
		//生成token
		String token = builder.compact();
		System.out.println(token); 
}

运行结果如下:

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE1OTM5NTE5NjN9.QcLKWVUOa15EaSAHyLAIkBooxzWtZmaz6HG2nIdubUI
 

2.2.3解析token

解析时使用的密钥要和生成token时使用的密钥一致,不然会报错。

public static void main(String[] args) {
		String token = 
				"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxIiwic3ViIjoiYWRtaW4iLCJpYXQiOjE1OTM5NTE5NjN9.QcLKWVUOa15EaSAHyLAIkBooxzWtZmaz6HG2nIdubUI";
		Claims claims = Jwts.parser()
				.setSigningKey("123456") //设置密钥
				.parseClaimsJws(token).getBody();
		
		System.out.println(claims.getId());
		System.out.println(claims.getSubject());
		System.out.println(claims.getIssuedAt());
}

结果如下

和生成使用的信息一致。

2.3.4自定义claims

自定义claims使用claim(String name, Object value)方法,解析使用get(Object key);

long exp = System.currentTimeMillis() + 1000 * 60;//当前时间 
        JwtBuilder builder= Jwts.builder()
                .setId("1")
                .setSubject("admin")
                .setIssuedAt(new Date())
                .claim("roles", "admin")
                .setExpiration(new Date(exp))
                //指定签名加密类型和密钥
                .signWith(SignatureAlgorithm.HS256, "123456");
        //生成token
        String token = builder.compact();
        System.out.println(token); 

解析

Claims claims = Jwts.parser()
                .setSigningKey("123456") //设置密钥
                .parseClaimsJws(token).getBody();

System.out.println("roles:" + claims.get("roles"));

 

3.JWT在项目中的使用

3.1创建JwtUtil工具类

@Getter
@Setter
@ConfigurationProperties("jwt.config")
public class JwtUtils {
    //签名私钥
    private String key;
    //签名的失效时间
    private Long ttl;

    /**
     * 设置认证token
     *      id:登录用户id
     *      subject:登录用户名
     *
     */
    public String createJwt(String id, String name, Map<String,Object> map) {
        //1.设置失效时间
        long now = System.currentTimeMillis();//当前毫秒
        long exp = now + ttl;
        //2.创建jwtBuilder
        JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(name)
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, key);
        //3.根据map设置claims
        for(Map.Entry<String,Object> entry : map.entrySet()) {
            jwtBuilder.claim(entry.getKey(),entry.getValue());
        }
        jwtBuilder.setExpiration(new Date(exp));
        //4.创建token
        String token = jwtBuilder.compact();
        return token;
    }


    /**
     * 解析token字符串获取clamis
     */
    public Claims parseJwt(String token) {
        Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token).getBody();
        return claims;
    }

}

修改application.yml, 添加配置

jwt:
  config:     
    key: springboot-test     
    ttl: 360000

3.2执行和验证流程

1.前端输入用户名和密码发送登入请求,后台拿到前端发送的进行验证成功后生成token,并相应返回token。

2.之后前端发送请求需带上token。

前后端约定:前端请求微服务时需要添加头信息Authorization ,内容为Bearer+空格+token

String authorization = request.getHeader("Authorization"); 

//前后端约定头信息内容以  Bearer+空格+token 形式组成   

String token = authorization.replace("Bearer ", "");   

//比较并获取claims   

Claims claims = jwtUtil.parseJWT(token);   

if(claims == null) {      

    throw new CommonException(ResultCode.UNAUTHENTICATED);   

} 
System.out.println("id:" + claims.getId());
System.out.println("subject:" + claims.getSubject());
System.out.println("IssuedAt:" + claims.getIssuedAt());
System.out.println("roles:" + claims.get("roles"));

//验证相关角色和权限等等。。。

对于token解析一般都在拦截器中进行处理。然后再处理请求逻辑

 

.NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6) 🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 目录 一、简介 二、实现目标 1、一处登录,全部登录 2、一处退出,全部退出 3、双token机制 三、功能实现和核心代码 1、一处登录,全部登录实现 阅读详情

相关推荐

android密码解锁/指纹解锁返回的authToken深度解剖

目录1、authToken是什么2、authToken代码精读(1)、AddAuthenticationToken(2)、FindAuthorization(3)、AddAuthenticationToken 1、authToken是什么 在android中authToken是一串标致调用者身份的数据,是一个结构体. 在gatekeeper和fingerprint的鉴权成功后(verify成功后),都会返回一个authToken给android,然后加入到auth_token_table表中, 该表最大存储

baron-周贺贺-代码改变世界ctw 5097

auth认证相关 --token 深入了解

Token 的简述 token 顾名思义就是一块令牌(临时的令牌),我们可将它理解为一种暗号,类似于对口号。这个令牌 token 是由服务器生产,一串字符串,然后会一式两份分别有客户端 与 服务器保管。 Token 的作用 token 可以免去从前标记用户登录的方式,不需要繁多的登录操作,请求端只需要携带 token 去访问服务器,服务器会根据 token 认证是否成功进行区别响应。 token...

洋洋洋洋洋Vc 的博客 1万+

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1990

基于Token的WEB后台认证机制

几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采...

weixin_30845171的博客 4525

QEMU pcie config空间访问机制

而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。

leiyanjie8995的博客 1953

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

JWT以及TokenAuth

JWT以及TokenAuth

m0_47944994的博客 3038

Matlab图像处理频域滤波实现——高斯低通、高通、带通带阻滤波器

如果你想要进一步了解更多的相关知识,

小嘤熊的博客 1万+

手机token登入软件_基于token的用户登录验证使用jjwt工具以及web网站验证的常用方式...

1.网页常用的几种验证方式(1)HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,...

weixin_39913141的博客 1166

Nuvoton OpenTitan开源安全芯片技术解析与应用

硬件安全模块(HSM)作为可信计算基的核心组件,其设计透明度和可验证性正成为行业焦点。RISC-V架构凭借开源特性,为构建可审计的安全芯片提供了新范式。OpenTitan项目通过开放Verilog源码和形式化证明,实现了从物理不可克隆函数(PUF)到分层安全启动的全栈透明。该方案在lowRISC Voyager开发板上实测显示,安全启动时间小于200ms,性能损耗仅7%,显著优于传统黑盒方案。目前该技术已应用于Chromebook和数据中心,其40nm工艺版本更将功耗降至5μA待机水平,为物联网和边缘计算提

weixin_36303807的博客 399

ESXI 8.0虚拟机安装OpenWRT软路由详细教程

OpenWrt 是嵌入式的 Linux 路由器固件,OpenWrt在稳定运行的同时提供了强大的扩展能力,用户可以完全的定制属于自己的路由系统,满足不一样的个性化需求,本文讲解如何使用ESXI安装OpenWRT,打造属于自己的软路由。本次安装使用的是版本。默认登录信息:用户:root密码:password下载固件:https://github.com/haiibo/OpenWrt/releases/tag/X86_64【CPU配置】:4核心。

qq_27121281的博客 3915

com.auth0.java jwt_【java】使用jwt进行认证授权

传统的web应用使用session来维护用户与服务器之间的状态,用户提交用户名密码到服务器,服务器生成会话id,并将验证通过的用户信息存到session中(内存or数据库),会话id会写出到cookie。用户登录之后的操作,都会附带包含sessionId的cookie,服务器根据用户端传来的sessionId获取用户信息,会话的有效期,包括用户登出等操作都依赖对session的操作,如下图:---...

weixin_31851979的博客 3750

C/C++ LMS算法详解及源码

LMS(Least Mean Squares)算法是一种自适应滤波器算法,用于估计一个系统的参数,以使输出信号与期望信号之间的均方误差最小化。LMS算法通过使用梯度下降的方法,逐步调整自适应滤波器的权值来优化滤波效果。

希望我的博客,能帮上你解决学习中工作中所遇到的问题 3276

Web: Auth权限认证

Http中的Auth: 分2种: authorization:针对权限。e.g:后端非管理员接口的调用403(权限不足) authentication:针对用户名密码登录的身份认证。错误码是401.(没有登录) HTTP中如何认证身份: http是无状态的,会导致一个问题: 第一次请求中进行了登录,第2次请求执行一些操作的时候,在这次请求是不知道上一次请求是已经登录的,所以第2次请求也是...

手写我对你的温柔 6062

web逆向伪瑞数案例:宝武资源有限公司(面向对象补环境)

声明:该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关前言:之所以称伪瑞数案例,是因为该网站,无论是补环境的方法、还是环境都和瑞数差不多,因为第一次遇到这种网站,不确定是不是瑞数的一种,所以这里称伪瑞数,有知道的道友,可以评论区评论下,共同进步。,这里就不做多介绍了1.瑞数中的是t​s,而该网站是_ss。2.外链js代码不能格式化,否则补环境时会遇到一个超过数组长度的报错。3.call执行后的虚拟文件中有超多的debugger。

老衲爱洗头的博客 2534

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

在laravel中使用jwt

jwt它的两大使用场景是:认证和数据交换 安装及基础配置 使用 composer 安装 composer require tymon/jwt-auth 在安装完成后,会生成这样一个目录 进行一些配置–只对laravel5.4以下的版本 这里值得注意的是,有些文档会说要添加Tymon\JWTAuth\Providers\LaravelServiceProvider::class ,这只在 Laravel 5.4 及以下版本是必要的,更新的 Laravel 版本无需添加。 发布配置文件 //这条命令会在

小信的博客 1899

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

几种常用的Web安全认证方式

1. Http Basic Auth 这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问的username和password,由于信息会暴露出去,所以现在也越来越少用了,现在都用更加安全保密的认证方式,可能某些老的平台还在用。 如下图所示,弹出一个框,让你填写用户名密码。这就是Tomcat自带的HTTPBasic认证。 当用户名密码输入错误后,会返回401 Una...

一只猿的自我修养 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

2.api认证方式

一. 安装jwt Laravel API 认证:JWT 认证 | Laravel China 社区 (1)准备工作 1.Authorizations:Bearer认证 2.安装 composer require tymon/jwt-auth 3.配置到发布文件中 如果出现到内存不足查看上一节 php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 配置成功会在config里...

m0_61927991的博客 741

Laravel5.6 使用 JWT 开发API中的疑惑

使用JWT参考文章:JWT的使用、JWT使用完整详解 简单梳理几个疑惑点。记录一下。 首先要区分laravel自带的auth认证方法和jwt的认证方法有哪些,别搞混了,你用jwt的方式生成token,用自带的auth去验证这就不对了。 安装完JWT可用中间件有:auth、auth:api、jwt.auth、jwt.refresh、jwt.check、jwt.renew   1、在传统的做...

小乔流水仁家的博客 1129

JWT学习流程及使用

然而,Session 是在服务器端的,而 JWT 是在客户端的。因为 JWT 可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。单点登录是现在广泛使用的 JWT 的一个特性,因为它的开销很小,而且可以轻松地跨域使用。JWT 一般被用来在身份提供者和服务提供者间传递被认证用户的身份信息,以便于从资源服务器获取资源,也可以增加一些额外的业务逻辑所需的声明信息。JWT,即 JSON Web Token,定义了一种紧凑的、自包含的方式,用于在网络应用环境间以 JSON 对象安全地传输信息。

m0_62356399的博客 924

java获取authorization_Java架构笔记:用JWT对SpringCloud进行认证和鉴权

JWT(JSON WEB TOKEN)是基于RFC 7519标准定义的一种可以安全传输的小巧和自包含的JSON对象。由于数据是使用数字签名的,所以是可信任的和安全的。JWT可以使用HMAC算法对secret进行加密或者使用RSA的公钥私钥对来进行签名。JWT通常由头部(Header),负载(Payload),签名(Signature)三个部分组成,中间以.号分隔,其格式为Header.Payloa...

weixin_39818691的博客 582

yuzu-downloads:快速取回 Yuzu 模拟器 7 个主线历史版本

yuzu-downloads 是一个集中存放 Yuzu 模拟器 Mainline 主线构建的存档仓库。仓库覆盖 2024 年 2 月 27 日至 3 月 4 日共 7 个版本,每个版本均提供 Linux 与 Windows 两种打包格式。读完本文,你可以按系统类型找到对应文件,并在两个平台上完成安装运行。 ## 你将获得什么 - **版本范围**:2024-02-27(120358cf6)至

gitblog_00748的博客 795

php 登录安全认证,介绍几种常用的web安全认证方式

本文为大家介绍了五种常用的web安全认证方式,具有一定的参考价值,希望能对大家有所帮助。1、Http Basic Auth这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问的username和password,由于信息会暴露出去,所以现在也越来越少用了,现在都用更加安全保密的认证方式,可能某些老的平台还在用。如下图所示,弹出一个框,让你填写用户名密码。这就是Tomcat自带...

weixin_39531594的博客 708

JWT认证原理入门:为什么react-redux-jwt-auth-example选择Bearer Token登录方案

**react-redux-jwt-auth-example** 是一个基于 React + Redux + React-Router 的 **JWT认证**示例项目,完整演示了使用 **Bearer Token** 方案实现前端登录、受保护路由守卫和受保护数据请求的全过程,是新手理解无状态认证原理的最佳起点。 在现代 Web 开发中,"用户登录"是最高频的需求之一,却也是新手最容易卡住的一环。

gitblog_00448的博客 154

req认证机制全攻略:Basic Auth、Bearer Token和Digest Auth终极指南

req作为一款Simple Go HTTP client with Black Magic,提供了三种主流的认证机制实现:Basic Auth、Bearer Token和Digest Auth。本文将详细介绍这三种认证方式的使用场景、实现原理和在req中的快速应用方法,帮助开发者轻松处理API认证需求。 ## 为什么选择req处理认证? 在现代API开发中,安全认证是保护资源访问的重要环节。r

gitblog_01121的博客 659

jwt token为什么要在返回前面添加Bearer这个单词?

首先,我们知道,jwt生成的token形如的字符串,但是为什么我们通常传输的是呢,还要多次一举地添加上一个Bearer呢?其实,这是一种规范。

weixin_48563863的博客 3575
上一篇: JVM的内存模型
下一篇: jmap的使用以及内存溢出分析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值