令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作,下文我们就来详细的介绍一下关于基于 Token 的身份验证的教程。
最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强,也更安全点,非常适合用在 Web 应用或者移动应用上。Token 的中文有人翻译成 “令牌”,我觉得挺好,意思就是,你拿着这个令牌,才能过一些关卡。
传统身份验证的方法
HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。
解决的方法就是,当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 Cookie 里,下次这个用户再向服务端发送请求的时候,可以带着这个 Cookie ,这样服务端会验证一个这个 Cookie 里的信息,看看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。
上面说的就是 Session,我们需要在服务端存储为登录的用户生成的 Session ,这些 Session 可能会存储在内存,磁盘,或者数据库里。我们可能需要在服务端定期的去清理过期的 Session 。(当然我们也可以使用redis进行相应的逻辑验证)
基于 Token 的身份验证方法
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码
验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据
JWT
实施 Token 验证的方法挺多的,还有一些标准方法,比如 JWT,读作:jot ,表示:JSON Web Tokens 。JWT 标准的 Token 有三个部分:
header
payload
signature
中间用点分隔开,并且都会使用 Base64 编码,所以真正的 Token 看起来像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
Header
header 部分主要是两部分内容,一个是 Token 的类型,另一个是使用的算法,比如下面类型就是 JWT,使用的算法是 HS256。
{ "typ": "JWT", "alg": "HS256" }
上面的内容要用 Base64 的形式编码一下,所以就变成这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Payload
Payload 里面是 Token 的具体内容,这些内容里面有一些是标准字段,你也可以添加其它需要的内容。下面是标准字段:
iss:Issuer,发行者
sub:Subject,主题
aud:Audience,观众
exp:Expiration time,过期时间
nbf:Not before
iat:Issued at,发行时间
jti:JWT ID
比如下面这个 Payload ,用到了 iss 发行人,还有 exp 过期时间。另外还有两个自定义的字段,一个是 name ,还有一个是 admin 。
{ "iss": "ninghao.net", "exp": "1438955445", "name": "wanghao", "admin": true }
使用 Base64 编码以后就变成了这个样子:
eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ
Signature
JWT 的最后一部分是 Signature ,这部分内容有三个部分,先是用 Base64 编码的 header.payload ,再用加密算法加密一下,加密的时候要放进去一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端。
header
payload
secret
var encodedString = base64UrlEncode(header) + "." + base64UrlEncode(payload); HMACSHA256(encodedString, 'secret');
处理完成以后看起来像这样:
SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
最后这个在服务端生成并且要发送给客户端的 Token 看起来像这样:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
客户端收到这个 Token 以后把它存储下来,下回向服务端发送请求的时候就带着这个 Token 。服务端收到这个 Token ,然后进行验证,通过以后就会返回给客户端想要的资源。
相关推荐
3、什么时候需要用户跳转到登录页面重新登录? 修改密码后 refresh token过期 用户登出后 refresh token刷新次数超过限制 4、如何防止一个用户同时使用多个设备登录? 将token存储在redis中 方案: 登陆时将token...
7. **令牌撤销**:如果`refresh_token`被盗或者用户注销,服务器应能撤销该令牌,防止非法使用。一旦撤销,任何持有该令牌的客户端将无法再获取新的`access_token`。 8. **安全性考虑**:为了保护`refresh_token`,...
sa-token v1.15.2这可能是史上功能最全的Java权限认证框架!在线资料Sa-Token是什么? sa-token是一个轻量级Java权限认证框架,主要解决:登录认证,权限认证,会话会话,单点登录,OAuth2.0等...Sa-Token能做什么?
首先,让我们理解什么是Token。Token是一个由服务器生成的随机字符串,它代表了用户的一次会话或者特定权限。在用户成功登录后,服务器会返回一个Token,客户端(通常是浏览器或移动应用)需要在后续的请求中携带这...
本话题主要关注如何在Android客户端上获取七牛的上传Token以及如何进行单张和批量图片上传。以下是关于这些知识点的详细说明: 1. **七牛Token获取**: - 七牛上传Token是安全上传文件时必不可少的一环。它是由...
首先,让我们理解什么是令牌验证。令牌验证是一种身份验证方法,它通过在客户端和服务器之间交换一个唯一的、不可预测的字符串(即令牌)来确认用户身份。在C#中,我们可以使用ASP.NET Core Identity或JWT(JSON Web...
首先,我们需要理解什么是Token。在计算机安全领域,Token通常指一种临时的身份凭证,用于验证用户或设备的身份。在OneNet平台上,Token主要用于设备接入时的身份验证,确保只有授权的设备才能与平台进行通信。Token...
首先,我们需要理解什么是`Token`。`Token`是一个字符串,它代表了用户的身份或授权信息。与传统的Cookie相比,`Token`不存储在客户端,而是由服务器生成并发送给客户端,通常保存在本地存储(如LocalStorage或...
在现代Web开发中,安全是至关重要的一个环节。Java作为广泛应用的后端开发语言,提供...如果你在使用过程中遇到任何问题,社区的支持和帮助总是可用的,无论是公开的留言评论还是私下的交流,都能为解决问题提供途径。
此外,API密钥应妥善保管,避免泄露,因为它能用于生成有效的Token,对平台造成安全风险。 **onenet_token.exe的用途** `onenet_token.exe`是这个工具的可执行文件,用户可以直接运行它来生成所需的Token。在...
小程序登录开发通常是调用wx.login获取code,然后发送到后台,后台请求微信拿到用户openId,然后根据openId查询用户,有就走登录流程然后返回token,没有则创建用户之后走登录流程然后返回token,也就是都需要返回一...
Android Token 过期刷新处理方法示例 Android Token 过期刷新处理是移动端应用程序中常见的问题之一。当用户的 Token 过期时,应用程序需要重新刷新 Token,以确保用户的身份验证。下面是 Android Token 过期刷新...
通常,这样的工具会包含一个用户界面,用户可以通过输入必要的账户信息和选择相应的设备或应用,点击按钮就能生成API token。此外,工具可能还提供了其他功能,比如查看、更新或撤销已生成的token,以及帮助文档和...
APP使用token和refreshToken实现接口身份认证,保持登录状态
能学到什么: 1、响应拦截器处理401权限错误。 2、防止重复请求refreshToken接口。 3、同时多个请求返回401,需要刷新token。 阅读建议:此资源以简单的demo演示了RefreshToken使用的全过程,介绍了基本的思路,...
为了保证这些用户能正常使用USB Token 3000,此驱动包提供了专门的XP版本。安装这个驱动后,用户可以将Token插入电脑的USB接口,系统将自动识别并加载驱动,使用户能够通过Token进行安全登录、电子签名或数据加密等...
首先,我们需要了解什么是token和cookie。cookie是保存在本地终端的数据,由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。token...
JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛...
在"swagger测试获取token"的场景中,我们讨论的是如何利用Swagger工具来处理身份验证过程,特别是获取访问令牌(Token)。 在前后端分离的架构中,通常会采用OAuth2或者JWT(JSON Web Tokens)等机制进行用户认证和...
token={{your_token}}', // 将{{your_token}}替换为实际的token值 fileManagerJson: '/upload/filemanager', allowFileManager: true, beforeUpload: function(file) { // 在这里可以添加额外的请求参数,如...