用户登入,难道也是和以往一样给一个session还是有什么更好的解决方案 (如果api服务器和放前端页面的服务器不是同一台,而且域名也不一样,那该怎么办,有没有一个一劳永逸的方法)
比如用户已经登入了,但是用户自行修改post的数据,比如把10改成了100,那后端怎么判断这个数据是否被更改
如果后端是分布式的话(比如云服务器),建议使用 oauth2.0中的token验证方式,如果只是开发的话,可以用cookie。
oauth登录流程如下:
新建token表,字段 token,user_id,login_at,expire_at
用户使用账号密码登录
登录成功则在数据表token插入一条记录,并把该用户之前所有token删除或者设置为过期,并把token返回给前端
前端使用ajax的时候添加headerAuthorization=token
后端读取请求头中的Authorization,并与数据库比对,如果存在且未过期,则视为合法用户,否则返回错误
后端数据验证,这个是前后端分离数据安全必须要做的。
通常的做法就是做sign加密
需要用到的是key和secret
比如淘宝api的加密方式 淘宝sign
key为用户标识,表名你是谁,secret代表你的钥匙。钥匙为服务端生成,只能在客户端加密时使用,在数据传输过程中不能包含sercet信息。
客户端根据特定规则对所有请求数据进行加密后,后端获取到所提交的数据在用同样方式加密,然后对比sign参数是否一致,一致则说明数据在传输过程中未遭到篡改。
另外还需要时间的时效性检测比如timestamp参数,要求时间误差不得超过前后5分钟
还有一点,数据重复请求,后端接收到sign后做个cache把sign存起来,失效时间5分钟(和上面时间对应),同一个sign表示本次请求已经重复请求过,然后拒绝
基本上都是这个流程,保证数据安全,时效性,防重复等。