发布时间:2020-1-5 分类: 行业资讯
在简要理解cookie /会话机制的文章中,简要介绍了cookie和会话的原理。本文将简要介绍另一个与cookie/session一样重要的技术术语:token。
什么是令牌
令牌意味着“令牌”是由服务器生成的字符串,作为客户端发出请求的标识符。
用户首次登录后,服务器会生成令牌并将令牌返回给客户端。之后,客户端只需要将令牌带到请求数据,而无需再次携带用户名和密码。
简单令牌的组成; uid(用户的唯一标识),时间(当前时间的时间戳),符号(签名,令牌的前几个数字通过哈希算法压缩成一定长度的十六进制字符串。防止令牌泄漏)。
身份认证概述
由于HTTP是无状态协议,因此它不知道谁正在访问我们的应用程序。在这里,用户被视为客户。客户端使用用户名和密码来传递身份验证,但是下次客户端发送请求时,必须对其进行验证。
一般的解决方案是,当用户请求登录时,如果没有问题,则在服务器上生成记录,其中指定了登录的用户,然后将记录的id发送给客户端, 客户端。收到此ID后存储在cookie中,下次用户再次向服务器发送请求时,您可以带上此cookie,以便服务器验证cookie中的信息,看看您是否可以在此处找到相应的信息。服务器该记录(如果可用)表示用户已通过身份验证并将用户请求的数据返回给客户端。
上述过程是使用会话,id值是sessionid。我们需要在服务器端存储用户生成的会话,这些会话存储在内存,磁盘或数据库中。
基于令牌机制的身份认证
使用令牌机制的身份验证方法不需要在服务器端存储用户的登录记录。可能的过程:
客户端使用用户名和密码请求登录。
服务器接收请求并验证用户名和密码。
验证成功后,服务器将生成令牌,然后将令牌发送到客户端。
客户端存储令牌并将其存储在cookie或本地存储中。
每次客户端向服务器发送请求时,都需要携带服务器发送的令牌。
服务器接收请求,然后验证客户端请求是否携带令牌。如果验证成功,则将请求的数据返回给客户端。
要使用令牌机制进行登录身份验证,您可以执行以下操作:
一个。使用设备mac地址作为令牌
客户端:客户端在登录时获取设备的mac地址,并将其作为参数传递给服务器
服务器:服务器收到参数后,会使用变量接收该参数,将其作为令牌保存在数据库中,并将令牌设置为会话。每次客户端请求时,它必须统一拦截它,并将客户端传递的令牌与服务器会话中的令牌进行比较。如果登录成功,则登录成功。
通过这种方式,客户端和服务器统一唯一标识并确保每个设备具有唯一标识。缺点是服务器需要保存mac地址。优点是客户端不需要再次登录。登录一次后即可使用。超时问题由服务器处理。
湾使用sessionid作为令牌
客户端:客户端使用用户名和密码登录
服务器:收到用户名和密码后,执行验证。如果本地获取的sessionid作为令牌返回给客户端,则客户端只需要稍后提供请求的数据。
这种方法的优点是方便,不需要存储数据。缺点是当会话到期时,客户端必须再次登录才能请求数据。
当然,对于一些具有高机密性的应用程序,可以使用这两种方法的组合来验证设备mac地址以及用户名和密码作为令牌。
APP使用令牌机制进行身份验证
当用户登录APP时,APP会向服务器发送加密的用户名和密码。服务器验证用户名和密码。如果验证成功,则生成相应数量的字符作为令牌并存储在服务器中,并将令牌返回给服务器。 APP方面。
将来,当APP再次请求时,所有需要验证的地方必须附有令牌,然后服务器验证令牌,并成功返回返回的结果。失败返回错误消息,用户再次登录。其中,服务器将设置令牌的有效期,每次APP请求时都将验证令牌和有效期。
令牌存储
令牌可以存储在数据库中,但令牌可能太长而导致令牌丢失(事实上,令牌丢失并重新验证,但不要经常丢失,不要t让用户进行身份验证)。
为了避免查询时间过长,可以将令牌放入内存中。这种查询速度绝对不是问题,您不必过于担心占用内存。即使令牌是32位字符串,该应用程序的用户数量也只有一百万或一千万,而内存不多。
令牌加密
令牌很容易泄露,如果它没有加密,可以很容易地复制并用于登录。加密方法通常是:
令牌是对称加密的,在存储时存储,并在使用时解密。
本文开头提到的签名符号:请求URL,时间戳和令牌由算法组合和加密。
最好使用两者的组合。
另一点是在网络级使用明文传输非常危险,因此请务必使用HTTPS协议。
总结
以上是用户身份验证过程中令牌的简要概述。我希望没有技术背景的产品经理在与兄弟沟通时不应被这些技术术语问到。
作者:转瞬即逝,互联网产品设计师,4年互联网产品经验。
本文最初由@流年发表。未经许可,禁止复制。
该地图由作者提供