ibcadmin 发表于 2019-10-24 09:48:13

什么是token及怎样生成token

<h1>什么是token?</h1>
<p>  token是服务端生成的一串字符串,以作客户端进行哀求的令牌,当第一次登陆后,服务器生成一个token便将此token返回给客户端,以后客户端只要带上这个token前来哀求数据即可,无需再次带上用户名和密码</p>
<p>  基于token的身份验证</p>
<p>  利用基于token的身份验证方法,在服务端不必要存储用户的登录记录.流程是如许的: 客户端利用用户名跟密码去哀求登录,服务度段收到哀求,去验证用户名和密码,验证乐成后,服务端会签发一个token,再把这个token发送给客户端,客户顿收到token以后可以把它存储起来,好比放在cookie内里或者local storage内里,客户端每次向服务端哀求资源的时间必要带上服务端签发的token,服务端收到哀求,然后去验证客户端哀求内里带着的token,如果验证乐成,以某种方式好比随机生成32位的字符串作为token,存储在服务器中,并返回token到APP,以后APP哀求时,凡是必要验证的地方都要带上该token,然后服务端验证token,乐成返回所必要的结果,失败返回错误信息, 重新登录,服务器上的token设置一个有效期,每次APP哀求时都要验证token和有效期.</p>
<p>token的优势:</p>
<p>  1.无状态.可扩展</p>
<p>  在客户端存储的token是无状态的,而且能被扩展的.基于这种无状态和不存储session信息,负载平衡器可以大概将用户的信息从一个服务器传到另一个服务器上.如果将已履历证的信息生存在session中,则每次哀求都必要用户向已验证的服务器发送验证信息(称为session亲和性).用户量大时,可会造成一些拥堵.但是不要发急,利用token之后题目就会解决,由于token本身hold住了用户的验证信息.</p>
<p>  2. 安全性</p>
<p>  哀求过程中发送token而不再发送cookie可以大概防止csrf(跨站哀求伪造).纵然在客户端利用了cookie存储token,cookie也仅仅是一个存储机制而不是用于认证,不将信息存储在session中,让我们少了对session操纵,token是有实效的,一段时间之后必要重新验证,我们也不一定必要比及token自动实效,token有撤回的操纵,通过token revocation可以使一个特定的token或是一组雷同认证的token无效.</p>
<p>  3. 可扩展性</p>
<p>  token可以大概将创建与其他程序共享权限的程序.比方,能将一个随便的交际账号和本身的大号联系起来.当通过服务登录(我们将这个过程Buffer)时,我们可以将这些buffer附到登录的数据流上.利用token时, 可以提供可选的权限给第三方应用程序,当用户想让另一个应用程序访问他们的数据,我们可以通过建立api,得出特殊权限的tokens</p>
<p>  4. 多平台跨域</p>
<p>  提前先品评下CORS(跨域资源共享), 对应用程序和服务进行扩展的时间,必要介入各种的设备和应用程序,让我们的api只提供数据服务,我们还可以做出设计选择来提供cdn中的资产.这消除了在为应用程序设置快速标头设置后CORS出现的题目,只要用户有一个通过了验证的token,数据和资源就可以大概在任何域上被哀求到.</p>
<h2>  token原理</h2>
<p><div align="center"></div></p>
<p>                              1. 将荷载payload,以及header信息进行Base64加密,形成密文payload密文,header密文</p>
<p>                              2. 将形成的密文用句号链接起来,用服务端秘钥进行HS256加密,生成署名</p>
<p>                              3.将前面的两个密文后面用句号链接署名形成最终的token返回给服务端</p>
<p> </p>
<p>          注: </p>
<p>           (1) 用户哀求时携带此token(分为三部门,header密文, payload密文,署名)到服务端,服务端分析第一部门(header密文),用base64解密,可以知道用了什么算法,此处分析发现是HS256</p>
<p>           (2). 服务端利用原来的秘钥与密文(header密文+"."+payload密文)同样进行HS256运算,然后用生成的署名与token携带的署名进行比对,若同等分析token正当,不同等分析原文被修改</p>
<p>           (3). 判断是否逾期,客户端通过用base64解密第二部门(payload密文),可以知道荷载中授权时间,以及有效期.通过这个与当前时间对比发现token是否逾期</p>
<p> </p>
<h1>token实现思绪:</h1>
<p><div align="center"></div></p>
<p>                                  1.用户登录校验,校验乐成后就返回token给客户端</p>
<p>                                  2. 客户端收到数据后生存在客户端</p>
<p>                                  3. 客户端每次访问api是携带token到服务器端</p>
<p>                                  4. 服务器端接纳filter过滤器校验. 校验乐成则返回哀求数据,校验失败则返回错误码</p>
<p> </p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/panshao51km-cn/p/11728901.html" target="_blank">https://www.cnblogs.com/panshao51km-cn/p/11728901.html</a>
页: [1]
查看完整版本: 什么是token及怎样生成token