用户身份验证的令牌—Token教程

一、什么是Token?

1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

总结:

  • 客户端使用用户名跟密码请求登录;
  • 服务端收到请求,去验证用户名与密码;
  • 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
  • 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
  • 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
  • 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

二、Token都可以解决哪些问题呢?

  • Token具有随机性、不可预测性、时效性、无状态、跨域等特点。
  • Token完全由应用管理,所以它可以避开同源策略
  • Token可以避免CSRF攻击
  • Token可以是无状态的,可以在多个服务间共享
  • Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。

当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。

三、Token的生命周期

1)用户未登录

用户执行注册/登录→

一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→

前端拿到返回的Token后,存入浏览器本地存储

2)用户每次访问博客页面

从本地存储中拿出Token→

JS将 Token 放入request的Authorization头,发送http请求向后端索要数据→

服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。

四、如何设置Token的有效期?

其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。

那么为Token设置有效期还有必要吗?

对于这个问题,大家不妨先看两个例子:

例1:登录密码

登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。

例2:安全证书

SSL安全证书都有有效期,目的是为了解决吊销的问题。

所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。

那么,Token的有效期多长合适呢?

一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?

为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。

如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。

另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。

这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。

五、使用 Token 和 Refresh Token 的时序图

1)登录

 2)业务请求

3)Token 过期,刷新 Token

用户身份验证的令牌——Token - 知乎 (zhihu.com)

什么是token - 简书 (jianshu.com)

Token的详细说明,看这一篇就够了 - 简书 (jianshu.com)

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

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

相关文章

【加餐 2】Tab 标签页管理

【加餐 2】Tab 标签页管理 对于管理系统,经常需要开启多个标签页,但是每次都需要手动去关闭,很麻烦,所以就有了这个功能,可以一键关闭所有标签页,或者关闭除当前标签页外的所有标签页,对于重要的标签页,可以进行固定至前列,方便下次快速打开。 一、实现效果 实现效…

从零开始的ChatGLM 配置详细教程

从零开始的ChatGLM配置教程 文章目录 从零开始的ChatGLM配置教程一,前言二,环境配置1、下载ChatGLM项目2、配置程序运行环境 三、在HuggingFace下载chatGLM-6B模型1,安装 Git Lfs2,下载相关文件3,在HuggingFace中下载相…

蜜雪冰城、茶颜悦色“卷”向咖啡赛道

配图来自Canva可画 一年一度的“双11”电商节战报,揭示了各行各业的品牌热度,今年多个咖啡品牌赫然登上爆火品牌的榜单。据了解,新锐品牌三顿半再次登顶速溶咖啡类目TOP1,截止到11月11日0点45分,今年双11累计成交额突…

ロゼッタ / 火奶

目录 基本资料面板值(无天冥加成)天冥奖励 战斗宣言(VC)被动效果技能本体AS 珠子 回到人物索引 基本资料 NS(4★)NS(5★)AS卡池 (Ver 2.0.20)卡池 (Ver 2.0.20)卡池 (Ver 2.6.10)—ジャッジメントの書(ナダラ火山VH古…

chatgpt赋能python:PythonRemovebg:一个强大的背景去除工具

Python Removebg:一个强大的背景去除工具 随着社交媒体和电子商务的发展,完美的照片处理越来越重要。其中最重要的一步就是去除背景,从而让照片更加专业。传统的方法需要使用复杂的软件和大量的时间,但是现在有了Python Removebg…

chatgpt赋能python:Python自动化不同账号登录

Python 自动化不同账号登录 在日常的工作中,我们可能需要登录多个不同的账号,手动一个一个输入用户名和密码费时费力。而 Python 的自动化功能可以帮助我们实现登陆多个不同账号的目的。本文将介绍使用 Python 自动化不同账号登录的方法。 简介 Pytho…

chatgpt赋能Python-pythonguanwang

Python官网SEO分析 Python是一种高级编程语言,被广泛应用于Web开发、数据科学、人工智能、机器学习等领域。Python官网(https://www.python.org)是Python语言的官方网站,为Python用户和开发者提供了最新的Python解释器、文档、库…

chatgpt赋能python:Python可以搜集网上资料吗?

Python 可以搜集网上资料吗? Python 是一种非常流行的编程语言,它广泛应用于数据科学、机器学习、人工智能等领域。作为一名 Python 工程师,我们经常需要在互联网上搜集资料来解决开发中的问题,但是有些人会问:Python…

使用Unity制作游戏AI

本文由独立游戏工作室Synnaxium Studio介绍游戏AI的概念和开发方法。本文中所有内容都是他们在开发《Radiant Blade》游戏的原型阶段所积累的经验。下面是《Radiant Blade》的演示画面。使用游戏AI的原因首先,我们要思考为什么要给游戏添加AI?长期以来&a…

【Novel AI】使用绘画AI构建unity游戏资源

请勿在商业用途中使用下面的示例图中的任何资源! 1. 设想: 首先根据自己的设想,创造一些角色原型,角色特点等等 这里我根据网络上找的一些参考,我大概想要的是比较特别的一个警察的猫人形的动物角色; 2…

2023-04-27 Android APP 不同机型跳转应用权限设置页面,我这里在小米(android12)和三星(android8)上测试

一、代码 package com.xxx.bluetooth_ble.permission;import android.content.ActivityNotFoundException; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.…

【ROM定制】Android 12 制作『MIUI官改』那点事④修改

作者:小谢 内容:「MIUI官改」的修改 时间:2022.10.14 机型:小米10 安卓:Android 12 版本:V13.0.7.0稳定版 制作『MIUI官改』③工具:查看链接 ————————ROM修改———————— →◆解压…

雅思小作文 / IELTS Task1

The collection of IELTS Test resources. Based on Cambridge English 9-14 Last edited by Tang at 2019.06.11 17.01 Writing Task 1(1 or 2 days) 为什么我认为在准备writing时,task1更加重要? 因为task1侧重描写&#…

插画培训班学费一般是多少钱

插画培训班学费一般是多少钱?我们看待任何问题都要全面的思考,所以今天将会从三个方面来解析,分别是如何辨别插画培训机构是否靠谱、插画网课平台有哪些、插画培训班如何避坑,赶紧进入精彩内容吧! 一:插画培…

首席新媒体运营黎想教程:线上活动推广策划及方案解析

对运营人员来说,活动运营是非常重要的一部分工作内容。那么细化到在线学习平台,组织运营一场活动有哪些要点呢?活动设计上又要注意什么呢?本文将告诉我们答案。 现在我介绍一下,我是青岛艺形艺意文化传媒有限公司创始…

新媒体运营教程:策划一场成功漂亮的活动策划

作为一个运营人,活动推广(活动运营)是我们运营人在工作当中运用最多的一个推广手段,也是通过活动策划,创意策划、活动互惠、互动反馈,对于引流、交互等行之有效的方式。 所以,在营销推广中的活动…

游戏推广怎么做比较好?做游戏推广时如何选取靠谱的宣传机构

本文由鲨鱼网媒小编为你分享! 一、游戏推广的方法 1、多平台游戏推广 游戏推广可以透过多平台进行,比如通过社交媒体、论坛、网站、网络广告、视频、游戏联盟等渠道进行推广。可以通过利用这些渠道进行游戏宣传,可以更有效地提高游戏的知名…

APP社交类项目(类微信)运营之一线上推广

项目二于上月已完成原型设计,内部测试,目前处于推广阶段。下面聊一下我们团队目前想到并正在使用的推广方式: 推广方式主要聚焦于线上, 一、上线各大android平台,现在各大安卓市场都有活动,而且都是免费的&…

新媒体渠道运营推广技巧

渠道运营主要在于帮助产品在不同流量渠道获取到更多的目标用户,进而使得产品在整个生命周期内实现良性循环发展。通过一切可以利用的资源和流量为你的产品带来新增的的手段;其中包括免费、付费、换量、人脉积攒、产品的吸引力、圈内人的推荐、策划活动、内容营销、用…

3an推客推广有效果吗?

3an推客推广有效果。首先,我们都知道,3an推客可以帮助广大商家和小伙伴进行推广和营销。门槛很低,即使你的店铺零销售或者无销售,也可以进入3an推客进行推广。 而且3an推客的推广模式和淘宝客是一样的,也就是我们熟知的…