JWT登录认证实战模拟过程全纪录
目录
- Token 认证流程
- Token 认证优点
- Jwt 结构
- JWT 基本使用
- 实战:使用 JWT 登录认证
- 附:为什么使用jwt而不使用session
- 总结
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
Token 认证流程
- 作为目前最流行的跨域认证解决方案,JWT(JSON WEB Token) 深受开发者的喜爱,主要流程如下:
- 客户端发送账号和密码请求登录
- 服务端收到请求,验证账号密码是否通过
- 验证成功后,服务端会生成唯一的 token,并将其返回给客户端
- 客户端接受到 token,将其存储在 cookie 或者 localStroge 中
- 之后每一次客户端向服务端发送请求,都会通过 cookie 或者header 携带该 token
- 服务端验证 token 的有效性,通过才返回响应的数据
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
Token 认证优点
- 支持跨域访问:Cookie 是不允许跨域访问的,这一点对 Token 机制是不存在的,前提是传输的用户认证信息通过 Http 头传输
- 无状态: Token 机制在服务端不需要存储 session 信息,因为 Token 自身包含了所有登录用户的信息,只需要在客户端的 cookie 或本地介质存储状态信息
- 适用性更广: 只要是支持 http 协议的客户端,就可以使用 token 认证。
- 无需考虑CSRF: 由于不再依赖 cookie,所以采用 token 认证方式不会发生 CSRF,所以也就无需考虑 CSRF 的防御
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
JWT 结构
- 一个 JWT 实际上就是一个字符串,它由三部分组成:头部、载荷与签名。中间用点 . 分隔成三个部分。注意 JWT 内部是没有换行的。
? 头部 / header
header
由两部分组成: token
的类型 JWT
和算法名称:HMac
、SHA256
、RSA
{ "alg": "HS256", "typ": "JWT" }
? 载荷 / Payload
Payload
部分也是一个 jsON
对象,用来存放实际需要传递的数据。JWT
指定七个默认字段供选择。
除了默认字段之外,你完全可以添加自己想要的任何字段,一般用户登录成功后,就将用户信息存放在这里
iss:发行人
exp:到期时间
sub:主题
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT
{ "iss": "xxxxxxx", "sub": "xxxxxxx", "aud": "xxxxxxx", "user": [ 'username': '极客飞兔', 'gender': 1, 'nickname': '飞兔小哥' ] }
- ? 签名 / Signature
- 签名部分是对上面的 头部、载荷 两部分数据进行的数据签名
- 为了保证数据不被篡改,则需要指定一个密钥,而这个密钥一般只有你知道,并且存放在服务端
- 生成签名的代码一般如下:
// 其中secret 是密钥 String signature = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
JWT 基本使用
- 客户端收到服务器返回的 JWT,可以储存在 Cookie 里面, 也可以储存在 localStorage
- 然后 客户端每次与服务器通信,都要带上这个 JWT
- 把 JWT 保存在 Cookie 里面发送请求,这样不能跨域
- 更好的做法是放在 HTTP 请求的头信息 Authorization 字段里面
fetch('license/login', { headers: { 'Authorization': 'X-TOKEN' + token } })
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
实战:使用 JWT 登录认证
这里使用 ThinkPHP6
整合 JWT
登录认证进行实战模拟
? 安装 JWT 扩展
composer require firebase/php-jwt
? 封装生成 JWT 和解密方法
salt = config('jwt.salt') || "autofelix"; } // jwt生成 public function generateToken($user) { $data = array( "iss" => 'autofelix',//签发者 可以为空 "aud" => 'autofelix', //面象的用户,可以为空 "iat" => Helper::getTimestamp(), //签发时间 "nbf" => Helper::getTimestamp(), //立马生效 "exp" => Helper::getTimestamp() + 7200, //token 过期时间 两小时 "user" => [ // 记录用户信息 'id' => $user->id, 'username' => $user->username, 'truename' => $user->truename, 'phone' => $user->phone, 'email' => $user->email, 'role_id' => $user->role_id ] ); $jwt = JWT::encode($data, md5($this->salt), 'HS256'); return $jwt; } // jwt解密 public function chekToken($token) { JWT::$leeway = 60; //当前时间减去60,把时间留点余地 $decoded = JWT::decode($token, new Key(md5($this->salt), 'HS256')); return $decoded; } }
? 用户登录后,生成 JWT 标识
only(['username', 'passWord', 'code']); // ....进行验证的相关逻辑... $user = UserModel::where('username', $data['username'])->find(); // 验证通过生成 JWT, 返回给前端保存 $token = (new JwtService())->generateToken($user); return json([ 'code' => ResponseCode::SUCCESS, 'message' => '登录成功', 'data' => [ 'token' => $token ] ]); } }
? 中间件验证用户是否登录
在 middleware.php
注册中间件
<?php // 全局中间件定义文件 return [ // ...其他中间件 // JWT验证 appmiddlewareAuth::class ];
注册中间件后,在权限验证中间件中完善验证逻辑
pathinfo(), $this->router_white_list)) { $token = $request->header('token'); try { // jwt 验证 $jwt = (new JwtService())->chekToken($token); } catch (Throwable $e) { return json([ 'code' => ResponseCode::ERROR, 'msg' => 'Token验证失败' ]); } $request->user = $jwt->user; } return $next($request); } }
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
附:为什么使用jwt而不使用session
- session是将客户端数据储存在服务器的内存,当客服端的数据过多,服务器的内存开销大;
- session的数据储存在某台服务器,在分布式的项目中无法做到共享;
- jwt的安全性更好。
总而言之,如果使用了分布式,切只能在session和jwt里面选的时候,就一定要选jwt。
经过php小编香蕉精心整理,我们为大家介绍一款热门的实战开发模拟过程全纪录——jwt登录认证实战模拟。jwt(json web token)是一种用于认证的开放标准,它通过在用户登录成功后生成一个令牌(token),用户在后续的请求中携带这个令牌来进行身份认证。本文将深入剖析jwt登录认证的实现过程,并提供全面的实战演示录音,在这个过程中,我们将带您了解jwt的原理以及如何在实际开发中应用。无论你是初学者还是有经验的开发者,都能从本文中获得有价值的知识和实战经验。
总结
以上就是JWT登录认证实战模拟过程全纪录的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!
<!--
-->
智能AI问答
每日运维网(www.mryunwei.com)智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
我要提问
相关标签:
权限验证 php 分布式 中间件 json csrf 封装 Cookie Session Token 字符串 对象 算法 http
来源:编程网网
收藏
点赞
上一篇:jQuery如何添加类?
下一篇:PHP实现AJAX动态网页及相关函数详解
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
认识Go语言中的引用传递2024-04-03 13:12:01
永劫无间手游测试资格获得方法2024-04-03 13:10:14
基于聚合数据的老黄历接口调用示例-Python版2024-04-03 13:10:02
Java 语法灯塔:点亮你的编程之路2024-04-03 13:07:05
Java 语法快车:快速掌握编程语言的基本要素2024-04-03 13:01:05
Win11edge浏览器看视频绿屏怎么办2024-04-03 13:00:30
保卫萝卜4海的闺女第84关怎么过2024-04-03 13:00:05
一汽解放与华为深化全面合作,2025年自动驾驶产品示范运营在即2024-04-03 12:58:01
福布斯2024富豪榜:17位加密富豪上榜 币安赵长鹏连三度夺冠2024-04-03 12:55:24
金铲铲之战s11擎天卫射手提莫阵容玩法详解2024-04-03 12:55:05
最新问题
如何根据父元素高度自动调整子元素的上边距?
我在一次老的大学考试中遇到了问题。基本上它要求:获取这个json文件[{"colore":"#FF0080","pos_orizz...
P粉086993788来自于2024-04-02 13:49:19
0
1
132
下载作为 api 调用响应的 ZIP 文件
我有一个二进制zip文件作为api调用的响应。我想使用Javacript/React直接下载该zip文件。我怎样才能实现这个目标?
P粉034571623来自于2024-04-02 13:56:27
0
1
169
不合作布尔逻辑
我的网站遇到了一个问题,至少几周来我一直在努力解决这个问题,所以我希望有人能够指出我哪里出了问题。对于一些背景知识,我是一名应届毕业生,这是我为最终项目构建的顶点项目,在演示之前我...
P粉343141633来自于2024-04-02 13:34:26
0
1
118
LESS string-set 的现代等价物是什么
有关字符串集及其用途的示例,请参阅使用LESS字符串集属性和内容方法经过多次困惑,我发现这已经过时了,并且自Chrome版本39以来就没有实现过,尽管它显然在LESS中继续存在。教...
P粉993712159来自于2024-04-02 13:29:36
0
1
197
缺少材质-ui 搜索图标的导入
importReactfrom'react'import{Search}from"@material-ui/icons/Search"constApp=()=&...
P粉208469050来自于2024-04-02 13:22:44
0
2
246
将 SVG 加载为内联并更改填充颜色
我这样使用SVG:<imagex="0"y="0"width="40"height="40"h...
P粉323224129来自于2024-04-02 13:32:42
0
1
184
将 jpg 图像从 mysql 添加到 html
作为序言,我对此很陌生,所以这可能是一个愚蠢的问题,但是......我正在尝试设计一个从数据库中提取的网站,我在该数据库中存储了“商店”的产品信息。这是我到目前为止的代码。sess...
P粉511757848来自于2024-04-02 13:27:34
0
1
165
寻找缩短 sqlcode 的替代方法
拜托,我想找到另一种方式示例数据日期番茄电话书笔2022-05-1522312022-05-153332我看到了这个结果日期番茄电话书笔2022-05-155563我用这个inse...
P粉144705065来自于2024-04-02 13:25:48
0
1
136
React 中的自定义钩子(类似)宏吗?
我最近才开始了解Lisp上下文中的宏是什么。我的理解是,基本上,代码分两遍执行。在第一遍中,解释器识别对宏的调用并用它们的返回值替换它们。第二个,它正常执行代码。这看起来就像Rea...
P粉393030917来自于2024-04-02 13:15:12
0
1
207
每 3 个元素包裹一个父元素
我只是想用一类搜索音频将一个div与幻灯片类包裹在每3个div周围。我遇到的一个错误是它说elem.parentElement未定义...所以这部分效果很好......consta...
P粉211273535来自于2024-04-02 13:11:31
0
2
115
相关专题
更多>
-
php文件怎么打开 -
php怎么取出数组的前几个元素 -
php反序列化失败怎么办 -
php怎么连接mssql数据库 -
php连接mssql数据库的方法 -
html怎么上传 -
PHP出现乱码怎么解决 -
php怎么在浏览器运行
热门推荐
PHPCMS如何实现框架外部传递参数进行帐号权限验证并提交文章数据??
怎样学习seo
seo外链应该怎么发?
jquery怎么添加css样式
Java后端开发:使用Java Servlet Filter进行API过滤器控制
热门教程
更多>
相关推荐
热门推荐
最新课程
jquery 基础视频教程
90560次学习
收藏
最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)
1373141次学习
收藏
独孤九贱(4)_PHP视频教程
1188820次学习
收藏
PHP实战天龙八部之仿爱奇艺电影网站
736962次学习
收藏
PHP入门视频教程之一周学会PHP
1439980次学习
收藏
ThinkPHP5实战之[教学管理系统]
696170次学习
收藏
Mock.js | Axios.js | Json | Ajax--十天精品课堂
169次学习
收藏
微信小程序开发之API篇
1453次学习
收藏
Webpack4.x---十天技能课堂
1978次学习
收藏
Bootstrap4.x---十天精品课堂
2293次学习
收藏
ECMAScript6 / ES6---十天技能课堂
2502次学习
收藏
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
[表单按钮] jQuery企业留言表单联系代码
[播放器特效] HTML5 MP3音乐盒播放特效
[菜单导航] HTML5炫酷粒子动画导航菜单特效
[表单按钮] jQuery可视化表单拖拽编辑代码
[播放器特效] VUE.JS仿酷狗音乐播放器代码
[html5特效] 经典html5推箱子小游戏
[图片特效] jQuery滚动添加或减少图片特效
[相册特效] CSS3个人相册封面悬停放大特效
[Bootstrap模板] 有机果蔬供应商网页模板 Bootstrap5
[后端模板] Bootstrap3多功能数据信息后台管理响应式网页模板-Novus
[Bootstrap模板] 房产资源服务平台网页模板 Bootstrap5
[Bootstrap模板] 简约简历资料网页模板 Bootstrap4
[Bootstrap模板] bootstrap响应式宽屏图书教育网站模板-DREAMLIFE
[后端模板] MAC风格响应式蓝色企业CMS后台管理系统模版
[后端模板] 响应式渐变大气后台管理系统网站模板-usinessbox
[Bootstrap模板] 响应式蔬菜水果商店网站模板-Organio
[网站素材] 可爱的夏天元素矢量素材(EPS+PNG)
[网站素材] 四个红的的 2023 毕业徽章矢量素材(AI+EPS+PNG)
[网站素材] 唱歌的小鸟和装满花朵的推车设计春天banner矢量素材(AI+EPS)
[网站素材] 金色的毕业帽矢量素材(EPS+PNG)
[网站素材] 黑白风格的山脉图标矢量素材(EPS+PNG)
[网站素材] 不同颜色披风和不同姿势的超级英雄剪影矢量素材(EPS+PNG)
[网站素材] 扁平风格的植树节banner矢量素材(AI+EPS)
[网站素材] 九个漫画风格的爆炸聊天气泡矢量素材(EPS+PNG)
[前端模板] 家居装潢清洁维修服务公司网站模板
[前端模板] 清新配色个人求职简历引导页模板
[前端模板] 设计师创意求职简历网页模板
[前端模板] 现代工程建筑公司网站模板
[前端模板] 教育服务机构响应式HTML5模板
[前端模板] 网上电子书店商城网站模板
[前端模板] IT技术解决互联网公司网站模板
[前端模板] 紫色风格外汇交易服务网站模板
- 关于我们
免责申明
意见反馈
讲师合作
广告合作
最新更新 - 每日运维网(www.mryunwei.com):公益在线php培训,帮助PHP学习者快速成长!
-
关注服务号
微信扫码
关注每日运维网(www.mryunwei.com)服务号
技术交流群
QQ扫码
加入技术交流群
app下载
扫描下载App
- 每日运维网(www.mryunwei.com)订阅号
- 每天精选资源文章推送
- 每日运维网(www.mryunwei.com)APP
- 随时随地碎片化学习
- 每日运维网(www.mryunwei.com)抖音号
- 发现有趣的
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
<!--
登录每日运维网(www.mryunwei.com),和优秀的人一起学习!
全站2000+教程免费学
微信扫码登录
-->
精品班
技术支持
技术咨询
学习群
会员优惠
返回顶部