登录

登录

登录设计

考虑的因素

跨域问题

使用传统的cookie方式登录,对于移动端的app,会存在无法使用跨域?

其实这个并不是不能跨越的壁垒,既然都是移动端了,为啥不能自己设置请求头,自己携带上,就ok了。就像curl工具,完全可以自己设置 cookie等。

token不能长期有效

需要设置一端时间内,让token失效的问题。不然泄漏了,则将会长期有效。

有效期内token失活

验证通过后,继续再验证是否失效的列表中,从redis、mysql中读取???

方案

方案一:token改造

这里的密码,实际上是旧的token。

请求时,携带登录信息
header token: 工号$哈希

哈希生成策略 工号 + 密码 + 日期 = 产生哈希

后端验证
取工号,获取密码
同样的策略计算哈希
将生成的哈希与目标哈希进行比较。

由于加上了日期,所以,token有效期为1天。缺点,由于0点,token会瞬间失效。

另外,每次登录成功后,强制返回给用户端一端随机字符串。每次哈希的时候,再带上这种字符串。不登录,则不继续更改。

方法二: 将token作为session_id使用

用户登录成功后,返回随机的session_id
session_id在时效范围内可用。自己维护在数据库或redis的存储。

用户每次请求的时候,在header中,放入token。设置token的失效时间。

由于跨域问题,手动的将session_id放到header的token字段中传输。

session_id 随机生成,而且不会长久有效。

方法三:jwt

使用jwt方式登录。

其实jwt的很多方式,在其他的登录方式中也能看到应用。

方法四:md5

使用md5简单的签名。

用户端需要传入明文的身份 + 签名。

后端,根据明文的身份,取出相关信息,按一定的方式,进行签名,校验、比较。若一致,则通过。
这实际上,又回到了方案一。只不过,所有的,都是后端计算、返回的。

缺点,一次生成,始终有效。

方法五:路由器登录模式

https://blog.csdn.net/qq_43803751/article/details/118374495

用户通过WiFi连上路由器过程中,用户端输出密码、而路由端验证,但是并没有传输密码。大致过程是:

用户要连路由器,发送请求,告诉路由,hi,哥们,我要登录了。路由器,返回一个随机的changlle给客户端。

客户端收到changelle,则将自己存储的密码,按一定的方式hash,将hash传送给路由。

路由拿到用户的hash,然后自己按同样的方式,chanllg + 密码,生成的hash跟提交的hash比较。

整个过程,完全没有见到用户提交自己的密码,抓握手包的话,也抓不到密码。想破解,难度非常的大。

缺点:系统好像就一个用户……。