1、目的
众所周知,在web端中,Token(令牌)只是作为防止用户重复提交表单的作用而存在。但是对于App客户端而言,Token却充当着另一种角色,类似现实生活中代表每个人的角色认证、或者类似浏览器cookie代表你访问网站的角色认证。前提,在有用户系统的应用中,在每次访问接口的时候,为了避免接口裸露被被无止境的请求攻击,往往我们会利用一种机制,过滤一切非应用用户端的非合法请求。首先我们不可能每次利用账号密码作为我们的过滤标准(会存在被抓包密码泄露风险),因此便有
Token(令牌)的存在。即在存在这里的Token是指在指定有效时间内可以代表用户角色,具有请求接口的权限。
当然,这里有开发者会提问,为什么不适用session。理论上是可以的,只是如果是有接触过这部分的移动开发者,session本地是不好处理的,并且完全依赖
session,会被黑客截取后模拟请求,依然会存在被攻击的风险。
2、实现思路
这里我不做加密方式选择的举例,这里只是做了简单的做了不可逆的MD5加密方式(账号+时间戳)。首先web框架是利用(spring + struct2 + mybatis),简单说明下实现思路:
1、用户登录。请求登录接口,如果账号密码核对正确,会根据账号和时间戳进行Md5加密生成Token
2、服务端双向保存token。服务端根据有效时间内生成对应的token之后,服务端双向保存了Memcache中(
Memcache 是一种分布式缓存存储机制,这里我就不详细说明了),最后通过登录接口返回Token信息至客户端中
3、客户端保存返回Token。
客户端通过登录接口成功返回的token,保存的内存中,在每次请求接口都要携带这个token,进行接口请求。
具体思路图如下所示:
4,表设计如下
CREATE TABLE
APP_USER_TOKEN
(
TOKENID VARCHAR2(10) NOT NULL,
USERID VARCHAR2(20),
CREATE_DATE VARCHAR2(20),
TOKEN_VAL VARCHAR2(20),
ISENABLED CHAR(1),
PRIMARY KEY (TOKENID)
);
共同学习,写下你的评论
评论加载中...
作者其他优质文章