• 什么是token及怎样生成token


    什么是token?

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

      基于token的身份验证

      使用基于token的身份验证方法,在服务端不需要存储用户的登录记录.流程是这样的: 客户端使用用户名跟密码去请求登录,服务度段收到请求,去验证用户名和密码,验证成功后,服务端会签发一个token,再把这个token发送给客户端,客户顿收到token以后可以把它存储起来,比如放在cookie里面或者local storage里面,客户端每次向服务端请求资源的时候需要带上服务端签发的token,服务端收到请求,然后去验证客户端请求里面带着的token,如果验证成功,以某种方式比如随机生成32位的字符串作为token,存储在服务器中,并返回token到APP,以后APP请求时,凡是需要验证的地方都要带上该token,然后服务端验证token,成功返回所需要的结果,失败返回错误信息, 重新登录,服务器上的token设置一个有效期,每次APP请求时都要验证token和有效期.

    token的优势:

      1.无状态.可扩展

      在客户端存储的token是无状态的,并且能被扩展的.基于这种无状态和不存储session信息,负载均衡器能够将用户的信息从一个服务器传到另一个服务器上.如果将已经验证的信息保存在session中,则每次请求都需要用户向已验证的服务器发送验证信息(称为session亲和性).用户量大时,可会造成一些拥堵.但是不要着急,使用token之后问题就会解决,因为token自己hold住了用户的验证信息.

      2. 安全性

      请求过程中发送token而不再发送cookie能够防止csrf(跨站请求伪造).即使在客户端使用了cookie存储token,cookie也仅仅是一个存储机制而不是用于认证,不将信息存储在session中,让我们少了对session操作,token是有实效的,一段时间之后需要重新验证,我们也不一定需要等到token自动实效,token有撤回的操作,通过token revocation可以使一个特定的token或是一组相同认证的token无效.

      3. 可扩展性

      token能够将创建与其他程序共享权限的程序.例如,能将一个随便的社交账号和自己的大号联系起来.当通过服务登录(我们将这个过程Buffer)时,我们可以将这些buffer附到登录的数据流上.使用token时, 可以提供可选的权限给第三方应用程序,当用户想让另一个应用程序访问他们的数据,我们可以通过建立api,得出特殊权限的tokens

      4. 多平台跨域

      提前先谈论下CORS(跨域资源共享), 对应用程序和服务进行扩展的时候,需要介入各种的设备和应用程序,让我们的api只提供数据服务,我们还可以做出设计选择来提供cdn中的资产.这消除了在为应用程序设置快速标头配置后CORS出现的问题,只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到.

      token原理

                                  1. 将荷载payload,以及header信息进行Base64加密,形成密文payload密文,header密文

                                  2. 将形成的密文用句号链接起来,用服务端秘钥进行HS256加密,生成签名

                                  3.将前面的两个密文后面用句号链接签名形成最终的token返回给服务端

              注: 

               (1) 用户请求时携带此token(分为三部分,header密文, payload密文,签名)到服务端,服务端解析第一部分(header密文),用base64解密,可以知道用了什么算法,此处解析发现是HS256

               (2). 服务端使用原来的秘钥与密文(header密文+"."+payload密文)同样进行HS256运算,然后用生成的签名与token携带的签名进行比对,若一致说明token合法,不一致说明原文被修改

               (3). 判断是否过期,客户端通过用base64解密第二部分(payload密文),可以知道荷载中授权时间,以及有效期.通过这个与当前时间对比发现token是否过期

    token实现思路:

                                      1.用户登录校验,校验成功后就返回token给客户端

                                      2. 客户端收到数据后保存在客户端

                                      3. 客户端每次访问api是携带token到服务器端

                                      4. 服务器端采用filter过滤器校验. 校验成功则返回请求数据,校验失败则返回错误码

    生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
  • 相关阅读:
    你还在钟情于windows XP吗?
    我常用的vim快捷键
    2013年读的书(很多还没看完)
    期末考试了
    顺着自己的心,去做自己喜欢的事
    关于最近新闻泛滥的几点看法以及学习的个人观点
    华为OJ_1
    【Android】弹出软键盘时候让上面布局跟着上移的方法
    【Android】策略模式封装百度地图路线规划模块
    google觉得好用的插件(不断更新)
  • 原文地址:https://www.cnblogs.com/panshao51km-cn/p/11728901.html
Copyright © 2020-2023  润新知