RESTful 具体含义请去搜索 ,意味着我们的服务是无状态的,每次调用完全无关的
那么我们怎么保证身份验证呢?
一般这类服务都是提供给别人调用(一般是 第三方系统 ),或者叫做应用程序编程接口 (api) 随便叫吧,就这么个意思
假如我有一个服务地址为 www.a.com/aservice/
提供给别人的登录名 为 system1 密码 为 abedeffffff
1---提供签到服务(相当于登录,这里的传输安全问题未考虑)(因为这里使用 用户名和密码 + ip验证,可以暂时不考虑传输安全,暂时这样吧,没考虑到好的方式)
比如 www.a.com/signinService 如果签到成功 返回加密字符串(推荐 使用 用户名 对 访问者ip 进行 对称加密),成功之后可以将用户名和 时间戳放到cache中
签到服务 主要做以下内容
1) 根据用户传递的用户名和密码,验证 是否正确,(同时服务中判断 是否允许此用户在此ip访问)
2)如果正确,则返回 使用用户名 对 允许的ip(多个以‘,’ 分割) + 时间戳 进行对称加密的结果 成功之后可以将用户名和 时间戳放到cache中
3) 之后所有服务则使用此 加密结果进行
2---当用户签到之后开始调用相关服务 使用 用户名 和 签到的加密字符串
在服务中获取用户传递过来的加密字符串,使用 用户名 对其进行解密,得到 的ip 和 此次访问服务的ip 进行对比(这里不每次都查询数据,因为效率效率问题暂时想到这种对比方式),如果包含 此次访问的ip即通过,否则不合法,如果限制访问频率, 可以对 解密出来得到的 时间戳 和缓存时间戳 进行对比,限制时间差距后更新cache 的时间戳