简单理解token机制(token机制原理)

在简单理解cookie/session机制这篇文章中,简要阐述了cookie和session的原理。本文将要简单阐述另一个同cookie/session同样重要的技术术语:token。

简单理解token机制(token机制原理)

什么是token

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

身份认证概述

由于HTTP是一种没有状态的协议,它并不知道是谁访问了我们的应用。这里把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下次这个客户端再发送请求时候,还得再验证一下。

通用的解决方法就是,当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁,然后把这条记录的id发送给客户端,客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下cookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

以上所描述的过程就是利用session,那个id值就是sessionid。我们需要在服务端存储为用户生成的session,这些session会存储在内存,磁盘,或者数据库。

基于token机制的身份认证

使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。大概的流程:

  1. 客户端使用用户名和密码请求登录。
  2. 服务端收到请求,验证用户名和密码。
  3. 验证成功后,服务端会生成一个token,然后把这个token发送给客户端。
  4. 客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。
  5. 客户端每次向服务端发送请求的时候都需要带上服务端发给的token。
  6. 服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

利用token机制进行登录认证,可以有以下方式:

a.用设备mac地址作为token

客户端:客户端在登录时获取设备的mac地址,将其作为参数传递到服务端

服务端:服务端接收到该参数后,便用一个变量来接收,同时将其作为token保存在数据库,并将该token设置到session中。客户端每次请求的时候都要统一拦截,将客户端传递的token和服务器端session中的token进行对比,相同则登录成功,不同则拒绝。

此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。

b.用sessionid作为token

客户端:客户端携带用户名和密码登录

服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。

此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。

当然,对于一些保密性较高的应用,可以采取两种方式结合的方式,将设备mac地址与用户名密码同时作为token进行认证。

APP利用token机制进行身份认证

用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。

以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。

token的存储

token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(其实token丢失了再重新认证一个就好,但是别丢太频繁,别让用户没事儿就去认证)。

为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存,就算token是一个32位的字符串,应用的用户量在百万级或者千万级,也是占不了多少内存的。

token的加密

token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:

  1. 在存储的时候把token进行对称加密存储,用到的时候再解密。
  2. 文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。

最好是两种方式结合使用。

还有一点,在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议。

总结

以上就是对于token在用户身份认证过程中的简单总结。希望没有技术背景的产品经理们在和开发哥哥沟通的时候不要再被这些技术术语问住了。

作者:流年,互联网产品设计师,4年互联网产品设计经验。

本文由 @流年 原创发布于人人都是产品经理。未经许可,禁止转载。

题图由作者提供

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至89291810@qq.com举报,一经查实,本站将立刻删除。
(0)
上一篇 2024年4月11日 下午3:45
下一篇 2024年4月11日 下午3:51

相关推荐

  • 网瘾不上学可以休学吗知乎(网瘾不上学可以休学吗)

    网瘾不上学可以休学吗 网瘾已经成为当今社会中一个不可忽视的问题。越来越多的人沉迷于网络世界,长时间的使用电子设备会导致身体不适、学习成绩下降、社交能力减弱等问题。面对网瘾,是否应该…

    教育百科 2024年7月11日
  • 《绿山墙的安妮》最纯真的十句话,人有目标,就不会无趣(绿山墙的安妮最经典的一句话)

    1. 在人的一生中,可以成就的事情有千万种,这是最令人兴奋的事情。实现了一个目标之后,又会看到远方还有一个新的目标等着你去继续奋斗-人生正因如此才不会变得无趣啊! 2. 她勇敢地直…

    教育百科 2024年4月25日
  • 在不读的一年后能去职校

    在不读一年后能去职校 在高中的最后一年,我感到非常迷茫和失落。我知道我没有完成我的目标,我不想继续读高中,而我的家人和朋友们则认为我应该继续坚持下去。但是,我真的不想留级或去职校。…

    教育百科 2024年12月4日
  • 大学强制休学是什么原因

    大学强制休学是什么原因? 近年来,大学强制休学的事件越来越多。为什么大学会强制休学呢?本文将探讨这些问题。 大学强制休学的原因可能是为了应对疫情或其他紧急情况。由于新冠疫情的影响,…

    教育百科 2025年3月16日
  • 太抑郁了太难受了(太抑郁了)

    以太抑郁了 以太抑郁了,这是一种让人感到无助和绝望的情绪,它不像快乐和悲伤那样容易表达,也不像愤怒和恐惧那样容易控制。以太抑郁了是一种深刻的情感,它让人感到孤独,无助和失落。 以太…

    教育百科 2024年9月1日
  • 洪武传奇

    洪武传奇 明朝时期,有一个传奇皇帝,他的名字叫朱元璋。朱元璋出身贫寒,从小生活艰苦,但他十分聪明机智,通过不断的努力,最终成为了明朝的开国皇帝,他的名字叫朱元璋。 朱元璋在明朝建立…

    教育百科 2024年12月28日
  • 林黛玉的性格特点和事迹

    林黛玉,是中国古典名著《红楼梦》中的主人公之一,她的性格独特,善良、敏感、自尊又自卑,同时有着丰富的情感和生活经历。 林黛玉出生于一个官宦家庭,但她的家族在政治上并不成功,因此她从…

    教育百科 2025年1月30日
  • 梦想的10道必考题

    梦想是每个人心中最珍贵的财富,是我们前进的动力和追求的方向。然而,在追求梦想的过程中,我们必须面对各种各样的试题和挑战,这些试题不仅考验着我们的智慧和勇气,更帮助我们更好地理解和把…

    教育百科 2024年12月12日
  • 八大豪侠在线观看高清全集(八大豪侠在线观看)

    八大豪侠是一部经典的武侠动画片,讲述了一群正义的侠客保护社会安全的故事。这部动画片自推出以来一直备受欢迎,不仅在国内,而且在国际市场上也有很高的知名度。 八大豪侠在线观看,不仅可以…

    教育百科 2024年9月14日
  • 厌学症特点

    厌学症是一种严重的心理健康问题,常常影响学生的学习成绩和学习能力。尽管它并不是一种普通的疾病,但对学生的学习和生活都造成了很大的影响。本文将介绍厌学症的特点,帮助学生了解自己的情况…

    教育百科 2025年2月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注