文档章节

JWT - Json Web Token

麦拂沙
 麦拂沙
发布于 2017/06/17 14:37
字数 677
阅读 165
收藏 2
点赞 0
评论 0
JWT

JWT是基于Json的开放标准,其定义了安全、紧凑、自包含的信息交换协议

优点

  • 跨平台、跨域、轻量级的传输
  • 可用于无状态的 身份认证、信息交换
  • JWT中的载荷信息是可信的(因为签名的存在)
  • 广泛用于分布式系统的SSO单点登录
  • OAUTH2中引入JWT能极大的简化认证流程
    • 授权服务器不需要维护Token存储
    • 资源服务器也不必要求Token检查
    • 减少了服务间的HTTP通信

缺点

  • JWT中存储信息如果过多很容易造成Token过大(可通过jti换取Redis集中存储中的用户信息 解决该问题)

组成

JWT由以下三部分Json数据的Base64Url密文,点号拼接而成

  1. Headers:包括ALGORITHM、TOKEN TYPE
  2. PAYLOAD:数据载荷,包括了三类claim信息
    • Reserved claims预定义信息(包括iss签发者exp过期时间sub请求者aud接收者nbf起效时间iat签发时间jti唯一标识
    • Public claims自定义信息
    • Private claims订阅方和接受方的协议信息
  3. Signature:签名(可选HS256(对称加密)RS256(非对称加密)两种签名算法)
	HMACSHA256(  #HS256签名算法
		base64UrlEncode(header) + "." + base64UrlEncode(payload),
		secret
	)

使用

HTTP头部带上Token信息

Authorization: Bearer jwt_token

Apache配置

Apache默认丢弃结构特殊、非base64编码的Authorization头部,所以需要额外配置下

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

Laravel JWT-Auth

## 安装 ##
composer require tymon/jwt-auth:0.5.*
#注册
Tymon\JWTAuth\Providers\JWTAuthServiceProvider
'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth'
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'
#发布配置
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
#生成秘钥
php artisan jwt:generate

## 配置 ##
- secret  签名秘钥
- ttl  token生存时间/min
- refresh_ttl  token刷新生存时间/min
- algo  token签名算法(维持默认即可)
- user  User模型名字空间
- identifier  对应于token subject claim的User模型标识
- required_claims  token中必须携带的chaim
- blacklist_enabled  若为false则刷新令牌后老令牌还是不会失效

## 签发令牌 ##
# 1. 快捷签发 #
$customClaims = [...]  #尽量控制chaim信息量以防token过大
$token = JWTAuth::attempt($credentials [, $customClaims])  #尝试登陆并签发令牌
$token = JWTAuth::fromUser($user [, $customClaims])  #基于用户签发令牌
# 2. 底层自定义签发 #
$payload = JWTFactory::make($customClaims)
$payload = JWTFactory::sub(xxx)->aud(xxx)->foo($customClaims)->make()
$token = JWTAuth::encode($payload)

## 认证 ##
# 1. 客户端请求提供token #
- HTTP头部方式:Authorization: Bearer JWT_Token
- Query方式:?token=JWT_Token
# 2. 解析请求中的token #
$token = JWTAuth::getToken()
$user = JWTAuth::parseToken()->authenticate()
JWTAuth::setToken('xxx.yyy.zzz') #手动设置一个jwt

## 中间件 ##
protected $routeMiddleware = [
    ...
    'jwt.auth' => 'Tymon\JWTAuth\Middleware\GetUserFromToken',
    'jwt.refresh' => 'Tymon\JWTAuth\Middleware\RefreshToken',
];
1. GetUserFromToken中间件 检查并解析token,否则抛出异常
	- tymon.jwt.absent
	- tymon.jwt.expired
	- tymon.jwt.invalid
	- tymon.jwt.user_not_found
	- tymon.jwt.valid
2. RefreshToken中间件  每次请求刷新token

© 著作权归作者所有

共有 人打赏支持
麦拂沙
粉丝 21
博文 102
码字总数 95668
作品 1
海淀
高级程序员
八幅漫画理解使用 JWT设计的单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统,然后再延伸到单点登录...

John Wu ⋅ 04/18 ⋅ 0

Json Web Token介绍与基本使用

一、Session与JWT 1.1 传统Cookie+Session +的存在主要是为了解决HTTP这一下服务器如何识别用户的问题。 其原理就是在用户登录通过验证后,服务端将数据加密后保存到客户端浏览器的Cookie中,...

yuanlaijike ⋅ 05/03 ⋅ 0

SpringBoot 整合 oauth2(五)实现 jwt 及 扩展

什么是jwt,即 json web token。JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。也是一种token,但是和token有一些不同。 jwt优点: 自包含 防篡改 可自定义扩展 JW...

FantJ ⋅ 05/22 ⋅ 0

SpringBoot--JWT集成配置

一, JWT简介 JWT 全名 JSON WEB Token 主要作用为用户身份验证, 广泛应用与前后端分离项目当中. JWT 的优缺点 : https://www.jianshu.com/p/af8360b83a9f 二, JWT 在 spring boot 项目当中的...

ge洋 ⋅ 05/19 ⋅ 0

tomsun28/bootshiro

bootshiro 自己在前后端分离上的实践 要想实现完整的前后端分离,安全这块是绕不开的,这个系统主要功能就是动态restful api管理,这次实践包含两个模块,基于搭建的权限管理系统后台bootshi...

tomsun28 ⋅ 04/25 ⋅ 0

基于Token的WEB后台认证机制:Token

一、常见的集中认证机制 1、HTTP Basic Auth 在每次访问 API 时,都要提供用户的username 和 password,Basic Auth 是配合 RESTful使用的最简单的认证方式,只需要提供用户名和密码即可。因此...

厚简 ⋅ 05/09 ⋅ 0

Java Token的原理和生成使用机制

在此之前我们先了解一下什么是Cookie、Session、Token 1、什么是Cookie? cookie指的就是浏览器里面能永久存储数据的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以...

心月狐 ⋅ 05/18 ⋅ 0

OAuth 及 移动端鉴权调研

OAuth OAuth是一个解决用户无需向第三方应用提供用户名密码,让第三方应用访问用户私密资源的授权方案。 举例: 用户a,在网站B存有私密信息(年龄、邮箱、头像),而a在访问第三方网站C时,为...

马肱 ⋅ 05/15 ⋅ 0

年薪20万Python工程师进阶(1):Django-第三方登录框架

1.安装 pip install social-auth-app-django 2.配置 INSTALLED_APPS=( ... 'social_django', ... ) 3.数据生成,直接migrate,因为源码中的 makemigrtasion 生成的数据库迁移文件已经存在了。...

程序员八阿哥 ⋅ 05/11 ⋅ 0

OpenID Connect 协议入门指南

如果要谈单点登录和身份认证,就不得不谈OpenID Connect (OIDC)。最典型的使用实例就是使用Google账户登录其他应用,这一经典的协议模式,为其他厂商的第三方登录起到了标杆的作用,被广泛参...

sunrongxin.py ⋅ 2017/06/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 50分钟前 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部