JWT 实现微服务鉴权

一、JWT

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。
一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

头部(Header)

头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等,这也可以被表示成一个JSON对象。

{"typ":"JWT","alg":"HS256"}

载荷(playload)

载荷就是存放有效信息的地方。包含三个部分:

(1)标准中注册的声明(建议但不强制使用)

iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token。

(2)公共的声明

公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密.

(3)私有的声明

私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

这个指的就是自定义的claim。比如前面那个结构举例中的admin和name都属于自定的claim。这些claim跟JWT标准规定的claim区别在于:JWT规定的claim,JWT的接收方在拿到JWT之后,都知道怎么对这些标准的claim进行验证(还不知道是否能够验证);而private claims不会验证,除非明确告诉接收方要对这些claim进行验证以及规则才行。
定义一个payload:

{"sub":"1234567890","name":"John Doe","admin":true}

签证(signature)

jwt的第三部分是一个签证信息,这个签证信息由三部分组成:

header (base64后的)payload (base64后的)secret

secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL查看数据库系统正在运行的进程

在 MySQL 5.6 以前,我们通过 show processlist 命令查看系统中正在运行的所有进程: mysql> show processlist; ------------------------------------------------------------------------------------------------ | Id | User | Host …

oauth2.0授权码_OAUTH 2.0授权码授予

oauth2.0授权码OAuth 2.0提供了许多安全流程(或授权类型),以允许一个应用程序访问另一个应用程序中的用户数据。 在此博客中,我们将介绍OAuth 2.0授权:授权代码授权。 首先,有许多定义: 客户…

JJWT签发与验证token

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。 官方文档: https://github.com/jwtk/jjwt 一、…

MySQL数据库创建用户_修改用户_删除用户_设置用户

文章目录创建新用户使用 CREATE USER 语句创建用户创建新用户,并且使用哈希值设置密码创建一个只能在数据库所在主机访问数据库的用户创建一个只能从指定 IP 连接数据库的用户创建一个可以从任意 IP 连接数据库的用户创建一个没有密码的用户在 mysql.user 表中添加用…

ide 日志 乱码_IDE日志分析方法pt。 2

ide 日志 乱码介绍 在第一部分中,我解释了测井分析的理论方法,我认为这对维持工程师是最好的。 该工程师不需要在日志出现时立即对其进行分析,而是专注于对复杂问题的深入分析。 在第二部分中,我将展示一个复杂的模板可以涵盖许多…

MySQL数据库的用户授权_查看权限

文章目录Mysql 的权限分类权限数据的存储每种权限的修改策略和作用范围刷新权限MySQL 提供的操作权限授权语法格式参考示例授予用户拥有某个数据库的全部权限授予用户拥有所有数据库的全部权限授予用户拥有某个数据库的部分权限授予用户拥有某个数据库中的某个表的部分权限授予…

系统微服务签发token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL创建用户报错 -- ERROR 1396 (HY000): Operation CREATE USER failed for ‘user_name‘@‘localhost‘

mysql> CREATE USER lwxlocalhost IDENTIFIED BY 123456; ERROR 1396 (HY000): Operation CREATE USER failed for lwxlocalhostmysql> drop user lwxlocalhost; # 使用drop user语句删除用户,可能是之前删除用户lwx的时候有问题,例如从user表删除…

jdk12源代码文件_JDK 11:轻松取出单文件Java源代码程序

jdk12源代码文件JDK 11 Early Access Builds包含与JEP 330相关的预览功能(“启动单个文件源代码程序”)。 我之前在“ Shebang即将来到Java? ”和“ 针对JDK 11提议的JEP 329和JEP 330 ”,由于JDK 11 Early Access Builds&#x…

网关过滤器验证token

一、JwtUtil 工具类 package com.changgou.system.utils;/*** author :lijunxuan* date :Created in 2019/7/11 17:14* description :* version: 1.0*/import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonweb…

MySQL SHELL 缓存历史命令

在正常情况下,我们在 MySQL SHELL 中输入的历史命令语句,通过上下箭头键可以向前向后查看,但是如果输入的语句中含有密码字段,那么这条命令语句不会被缓存到历史记录中。

java掌握_掌握Java 11的Constantdynamic

java掌握为了使JVM对动态语言更具吸引力,该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能,因为该功能已隐藏在Java字节码中。 简而言之,通过使用invokedynamic ,可以将方法调用的绑定延迟到第…

Mybatis动态代理模式实现CRUD

项目实现的功能 查询所有用户信息 通过Id查询用户信息 添加用户&#xff08;回显主键&#xff09; 修改用户信息 删除用户信息 通过用户名字模糊查询 一、引入依赖和工程结构 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

MySQL撤销(revoke)用户权限

文章目录撤销用户对某个数据库的全部权限撤销用户对某个数据库的部分权限撤销用户对某个数据库的某张表的部分权限撤销用户对任何数据库的任何表的部分权限撤销 WITH GRANT OPTION 权限权限表撤销权限的巨坑撤销语句要和授权语句完全一致权限 USAGE 是无法撤销的数据库 test 的…

无服务器–仅仅是构建现代应用程序的一种方法?

如果搜索“无服务器”&#xff0c;则会发现无服务器是构建现代应用程序的一种新的流行方式。 无服务器真的是新的吗&#xff1f; 无服务器是指您无需担心服务器的概念–无需置备&#xff0c;部署和维护服务器。 显然有服务器&#xff0c;但是您不必考虑或担心它们&#xff0c;…

Mybatis核心配置文件xml详解

<!-- configuration:在dtd约束中? 代表一次或零次 代表一次或多次&#xff08;最少一次&#xff0c;可以多次&#xff09;* 代表零次或多次&#xff08;有没有都可以&#xff09;, :逗号 特定的顺序&#xff08;&#xff09;| :竖杠 任选其一能添加的标签和顺序properties?…

MySQL查询语句后面加上“\G”,提示 ERROR: No query specified

在查询语句后面以 \G 结尾&#xff0c;表示纵向显示每行记录&#xff0c;如下所示&#xff1a; mysql> select * from student\G; *************************** 1. row ***************************id: 00000000000000000001name: liaowenxiongage: 22score: NULLbirthday:…

c++ 嵌套私有类_嵌套类和私有方法

c 嵌套私有类当您在另一个类中有一个类时&#xff0c;他们可以看到彼此的private方法。 在Java开发人员中并不为人所知。 面试过程中的许多候选人说&#xff0c; private是一种可见性&#xff0c;它使代码可以查看成员是否属于同一班级。 这实际上是对的&#xff0c;但更准确地…

Mybatis多参数封装到一个类中模糊查询

1.创建QueryValueObject实体类 package com.william.domain;import org.omg.PortableInterceptor.USER_EXCEPTION;/*** author &#xff1a;lijunxuan* date &#xff1a;Created in 2019/7/12 12:09* description &#xff1a;* version: 1.0*/ public class QueryValueObje…

MySQL数据库的权限表

文章目录user 表db 表tables_priv 表columns_priv表MySQL 数据库中与权限相关的表&#xff1a;user、db、tables_priv、columns_priv。 user 表 mysql> select * from mysql.user\G *************************** 1. row ***************************Host: localhostUser: …