文档章节

JWT - Json Web Token

麦拂沙
 麦拂沙
发布于 2017/06/17 14:37
字数 677
阅读 180
收藏 2
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

© 著作权归作者所有

共有 人打赏支持
麦拂沙
粉丝 22
博文 110
码字总数 99221
作品 1
海淀
高级程序员
[笔记] JWT Java Json Web Token (一)

jwt实现 JWT简单介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。J...

z201
2017/10/22
0
0
深入浅出JWT(JSON Web Token )

1. JWT 介绍 JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安全传输信息。 这些信息可以通...

mantoudev
05/05
0
0
JSON Web Token 入门教程

JSON Web Token 入门教程 作者: 阮一峰 日期: 2018年7月23日 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开...

祖冲之
07/24
0
0
八幅漫画理解使用JSON Web Token设计单点登录系统

八幅漫画理解使用JSON Web Token设计单点登录系统 Sep 07, 2015 in Engineering 上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。...

祖冲之
07/19
0
0
什么是JWT(JSON WEB TOKEN)

转自于:http://www.jianshu.com/p/576dbf44b2ae 什么是JWT Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,...

莫问今朝乄
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

ES6 Promise

Promise promise是异步编程的一种解决方案 1 什么是异步? 异步模式,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则...

NDweb
22分钟前
0
0
Python百分登顶年度编程语言排行榜

今天 IEEE Spectrum 发布了 2018 年度顶级编程语言排行榜。该榜单可根据流行趋势、职业方向、语言类型等多个标准各自细分生成榜单,也可以综合多个标准进行排列,使用者可以根据自己的需求过...

六库科技
26分钟前
0
0
consul笔记

安装和启动就不说了,很简单。 注册一个服务: http://localhost:8500/v1/agent/service/register put请求,json格式内容如下 { "ID": "userServiceId", //服务id "Name": "userService", //服...

朝如青丝暮成雪
26分钟前
0
0
iOS CollectionView 的那些事

UICollectionView是开发中用的比较多的一个控件,本文记录UICollectionView在开发中常用的方法总结,包括使用UICollectionViewFlowLayout实现Grid布局、添加Header/Footer、自定义layout布局...

aron1992
26分钟前
0
0
linux tar.gz zip 解压缩 压缩命令

http://apps.hi.baidu.com/share/detail/37384818 download ADT link http://dl.google.com/android/ADT-0.9.6.zip download SDK link http://dl.google.com/Android/android-sdk_r11-linux_......

owensliu
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部