首页 > 其他分享 >token的用法(生成和验证)

token的用法(生成和验证)

时间:2024-09-27 16:20:49浏览次数:3  
标签:请求 验证 Token 用法 token API 服务器 客户端

首先我们先来看一下图中显示的token,相信很多朋友都听说过token这种东西,但是没有深入了解过这些东西,下面让我浅显的介绍一下。

首先,Token(令牌)是一个广泛使用的概念,尤其在计算机科学和网络安全领域。它的具体含义和用途可能会根据上下文有所不同。以下是一些常见的Token类型及其详细介绍:

1. 认证Token

在Web开发中,认证Token通常用于用户身份验证和会话管理。用户在登录后,服务器会生成一个Token(例如JWT,JSON Web Token),并将其返回给客户端。客户端在后续请求中会将此Token包含在HTTP头中,以证明其身份。

  • 优点 :
    • 无需在服务器端存储会话信息,减少了服务器的负担。
    • 能够在多个服务之间共享用户身份。
    • 可以设置过期时间,提高安全性。

2. 访问Token与刷新Token

在OAuth 2.0等认证协议中,通常会使用访问Token和刷新Token。

  • 访问Token:用于访问受保护的资源,通常有效期短(如几分钟到几小时)。
  • 刷新Token:用于获取新的访问Token,通常有效期更长(如几天到几个月)。当访问Token过期时,客户端可以使用刷新Token请求新的访问Token,而不必重新登录。

3. API Token

API Token是用于身份验证的字符串,允许应用程序与API进行交互。开发者通常会在API服务中生成API Token,并将其提供给客户端应用。

  • 使用场景 :
    • 在调用API时,客户端需要在请求中包含API Token,以验证其身份。
    • 常用于第三方服务集成,确保只有授权的应用可以访问API。

4. CSRF Token

CSRF(Cross-Site Request Forgery)Token是一种安全机制,用于防止跨站请求伪造攻击。服务器在发送表单时,会附加一个随机生成的Token,客户端在提交表单时需要将该Token一起发送回服务器。服务器会验证Token是否匹配,以确保请求的合法性。

5. Session Token

Session Token通常用于Web应用的会话管理。用户登录后,服务器会为该用户创建一个会话,并生成一个Session Token。该Token会存储在客户端(通常是cookie中),并在后续请求中发送给服务器。

6. 其他类型的Token

  • Cryptographic Token:用于加密和解密数据的Token。
  • Smart Contract Token:在区块链中,智能合约可以生成和管理Token,代表某种资产或权益。

总的来说,Token的使用极大地简化了身份验证、授权和安全性管理。它们通过提供一种无状态的方式来验证用户和服务之间的交互,成为现代Web应用和API开发中的重要组成部分。在实现Token机制时,确保Token的安全性(如加密、过期机制等)是至关重要的。

验证方法一般如下:

Token验证流程通常涉及一系列步骤,以确保用户的身份和请求的合法性。以下是一个典型的Token验证流程,主要以JWT(JSON Web Token)为例进行说明:

1. 用户登录

用户通过前端界面输入凭据(如用户名和密码),并将这些信息发送到后端服务器。

2. 服务器验证凭据

后端服务器接收到用户的凭据后,会进行验证:

  • 检查用户名和密码是否正确。
  • 可以进行其他安全检查,如账户是否被锁定、是否过期等。

3. 生成Token

如果用户凭据有效,服务器会生成一个Token(例如JWT),并将用户的相关信息(如用户ID、角色等)编码到Token中。这个Token通常包含三个部分:

  • 头部 (Header):指定Token的类型和签名算法。
  • 负载 (Payload):包含用户信息和其他元数据。
  • 签名 (Signature):用于验证Token的真实性,防止被篡改。

4. 返回Token给客户端

服务器将生成的Token发送回客户端,通常在HTTP响应的主体中。

5. 客户端存储Token

客户端(如Web应用或移动应用)接收到Token后,通常会将其存储在本地存储、sessionStorage或cookie中,以便在后续请求中使用。

6. 客户端发送请求

在需要访问受保护资源的情况下,客户端会将Token附加到HTTP请求的Authorization头中,格式一般为:

Authorization: Bearer <token>

7. 服务器验证Token

当后端服务器收到请求时,会执行以下操作:

  • 从Authorization头中提取Token。
  • 验证Token的有效性,包括:
    • 检查Token是否已过期。
    • 验证Token的签名,以确保其未被篡改。
    • (可选) 检查Token的其他信息(如黑名单、权限等)。

8. 处理请求

如果Token验证成功,服务器将根据Token中包含的信息(如用户ID)处理请求并返回相应的资源。如果验证失败,服务器将返回401 Unauthorized状态码,表示请求未授权。

9. 刷新Token(可选)

如果使用了刷新Token机制,客户端在访问Token过期时,可以使用刷新Token请求新的访问Token,而无需重新登录。

// GenerateToken 生成Token
func GenerateToken(username string) (string, error) {
	claims := Claims{username, jwt.StandardClaims{
		ExpiresAt: time.Now().Unix() + 60*60,
		Issuer:    username,
	}}
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	return token.SignedString(SigningKey)
}

// VerifyToken 验证Token
func VerifyToken(tokenString string) error {
	_, err := jwt.ParseWithClaims(tokenString, &Claims{}, func(token *jwt.Token) (interface{}, error) {
		return SigningKey, nil
	})
	return err
}

标签:请求,验证,Token,用法,token,API,服务器,客户端
From: https://blog.csdn.net/weixin_45582252/article/details/142596410

相关文章

  • CA/B论坛发起投票,弃用基于WHOIS的域名验证方法
    近期,安全研究人员发现,过时的WHOIS服务器存在严重安全*洞,可能被用于伪造TLS/SSL证书,威胁互联网安全。这一发现促使CA/B论坛发起投票,考虑弃用基于WHOIS登记邮箱的域名控制验证(DCV)方法,以提高互联网的整体安全性。什么是WHOIS协议WHOIS协议起源于20世纪80年代早期,用于查询域名和IP地址......
  • java窗口登录界面实现随机验证码
    创建窗口内容及验证码更换代码示例:packageframe;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JTextField;publicclassJframeexte......
  • 【前端样式】Sweetalert2简单用法
    1、先安装sweetalert2库:        npminstallsweetalert22、引用SweetAlert2库:        importSwalfrom'sweetalert2';3、代码拷过去直接去测试,vue代码<template><div><el-buttonstyle="color:#C03639"@click="test">......
  • 伯俊开发回忆录---VIP充值退款增加短信验证逻辑
    一、前提总部财务需要增加对VIP卡充值退款的管控,防止资金被异常盗用,1、针对VIP充值退款获取验证码,表单增加验证码字段 2、系统随机生成6位数验证码并生成提醒信息通过公司发送平台进行发送   三、校验规则未输入验证码不允许提交验证码校验不通过提示重新输入 ......
  • js监听界面实现滑块自动验证
    functionsimulateMouseDown(target,options){varevent=newMouseEvent('mousedown',options);target.dispatchEvent(event);}functionsimulateMouseMove(target,options){varevent=newMouseEvent('mousemove',options);t......
  • pbootcms在内容详情页时{pboot:pageurl}和{content:link}​标签的用法
    在PBootCMS中,标签的使用非常灵活,可以帮助你在不同页面中获取所需的链接和其他信息。以下是关于 {pboot:pageurl} 和 {content:link} 标签的具体用法和区别:{pboot:pageurl} 标签用途获取当前页面的完整路径链接:包括域名在内的完整URL。用法适用于任意页面:可以在全......
  • 阿里云虚拟主机的PbootCMS网站为什么不显示后台登录验证码(pbootcms后台登陆不显示验证
    在使用PBootCMS时,如果遇到后台登录验证码不显示的问题,通常与服务器配置或PHP设置有关。以下是具体原因分析和解决方法:原因分析输出缓冲区未开启PHP的输出缓冲区(OutputBuffering)未开启,导致某些动态内容(如验证码图片)无法正常输出。权限问题文件或目录权限设置不当,导致......
  • shell中set指令的用法
    语法set[-可选参数][-o选项]功能说明set指令可根据不同的需求来设置当前所使用shell的执行方式,同时也可以用来设置或显示shell变量的值。当指定某个单一的选项时将设置shell的常用特性,如果在选项后使用-o参数将打开特殊特性,若是+o将关闭相应的特殊特性。而不带任......
  • mapbox没有token/token失效,地图闪烁后变空白,报错Error: A valid Mapbox access token
    目录mapbox没有token/token失效,地图闪烁后空白,报错Error:AvalidMapboxaccesstokenisrequiredtouseMapboxGLJS.一、问题描述二、mapbox去除token验证1、找到mapbox-gl文件夹2、找到mapbox-gl.js文件3、找到对应位置并修改 4、清除缓存5、问题解决三、高阶......
  • 枚举类型的基本用法(动手动脑)
    仔细阅读示例:EnumTest.java,运行它,分析运行结果?代码如下:`publicclassEnumTest{publicstaticvoidmain(String[]args){ Sizes=Size.SMALL; Sizet=Size.LARGE; //s和t引用同一个对象? System.out.println(s==t); //是原始数据类型吗? System.out.println(s.getCl......