●HTTP Basic Authentication 服务端针对请求头中base64加密的Authorization 和用户名和密码进行校验。
●TokenSession 只是一个 key,会话信息存储在后端。而 Token 中会存储用户的信息,然后通过加密算法进行加密,只有服务端才能解密,服务端拿到 Token 后进行解密获取用户信息。
●JWT认证
JWT(JSON Web Token)用户提供用户名和密码给认证服务器,服务器验证用户提交信息的合法性;如果验证成功,会产生并返回一个 Token,用户可以使用这个 Token 访问服务器上受保护的资源。
1.认证服务提供认证的 API,校验用户信息,返回认证结果;
2.通过JWTUtils中的RSA算法,生成JWT token,token里封装用户id和有效期;
3.服务间参数通过请求头进行传递,服务内部通过 ThreadLocal 进行上下文传递;
4.Hystrix导致ThreadLocal失效的问题可以通过,重写 Hystrix 的 Callable 方法,传递需要的数据;
Token最佳实践
●设置较短(合理)的过期时间。
●注销的 Token 及时清除(放入 Redis 中做一层过滤)。虽然不能修改 Token 的信息,但是能在验证层面做一层过滤来进行处理。
●监控 Token 的使用频率。为了防止数据被别人爬取,最常见的就是监控使用频率,程序写出来的爬虫程序访问频率是有迹可循的
●核心功能敏感操作可以使用动态验证(验证码)。比如提现的功能,要求在提现时再次进行验证码的验证,防止不是本人操作。
●网络环境、浏览器信息等识别。银行 APP 对环境有很高的要求,使用时如果断网,APP 会自动退出,重新登录,因为网络环境跟之前使用的不一样了,还有一些浏览器的信息之类的判断,这些都是可以用来保证后端 API 的安全。
●加密密钥支持动态修改。如果 Token 的加密密钥泄露了,也就意味着别人可以伪造你的 Token,可以将密钥存储在配置中心,以支持动态修改刷新,需要注意的是建议在流量低峰的时候去做更换的操作,否则 Token 全部失效,所有在线的请求都会重新申请 Token,并发量会比较大。