token认证和并发编程案例
一.三方token认证接口设计规范
前言
说明:在实际的业务中,跟第三方系统进行数据的交互与传递,为了保证数据在传输过程中的安全。除了https的协议之外,通过一套算法和规范来保证接口数据传输的安全性
目录
- token简介
- timestamp 简介
- sign 简介
- 防止重复提交
- 使用流程
- 示例代码
1. Token简介
Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。本次项目是保存token和token相关数据,比如失效时间到jvm缓存中
当一个请求过来后,服务器就去缓存服务器中查询这个Token是否存在,存在则调用接口,不存在返回接口错误,一般通过拦截器或者过滤器来实现
Token分为两种:
API Token(接口令牌): 用于访问不需要用户登录的接口,如登录、注册、一些基本数据的获取等。 获取接口令牌需要拿appId、timestamp和sign来换,sign=加密(appid+timestamp+key)。本次浪潮云登录模式
USER Token(用户令牌): 用于访问需要用户登录之后的接口,如:获取我的基本信息、保存、修改、删除等操作。获取用户令牌需要拿用户名和密码来换。统一身份登录模式
关于Token的时效性:
token可以是一次性的、也可以在一段时间范围内是有效的,具体使用哪种看业务需要。本次我们的需求是两个小时有效,一次性的一般用来作为防重操作
2. timestamp 简介
timestamp: 时间戳,是客户端调用接口时对应的当前时间戳,时间戳用于防止DoS攻击。当黑客劫持了请求的url去DoS攻击,每次调用接口时接口都会判断服务器当前系统时间和接口中传的的timestamp的差值,如果这个差值超过某个设置的时间(假如5分钟),那么这个请求将被拦截掉,如果在设置的超时时间范围内,是不能阻止DoS攻击的。本次需求没有用到,因为业务方和租户系统可以系统时间不一致,计算可能会有误差
3. Sign 简介
nonce:随机值,是客户端随机生成的值,作为参数传递过来,随机值的目的是增加sign签名的多变性。
4. 防止重复提交
对于一些重要的操作需要防止客户端重复提交的(如非幂等性重要操作),具体办法是当请求第一次提交时将sign作为key保存到redis。当同一个请求第二次访问时会先检测redis是否存在该sign,如果存在则证明重复提交了,接口就不再继续调用了。sign类似于一次性的token
5. 使用流程
接口调用方(业务方)向接口提供方(服务器)申请接口调用账号,申请成功后,接口提供方会给接口调用方一个appId和一个secret参数
客户端携带参数appId、timestamp、sign去调用服务器端的API token,其中sign=加密(appId + timestamp+key)
客户端拿着api_token 去访问不需要登录就能访问的接口
使用git如何下载github上的代码到本地
-
cd 到本地目录,使用git init 命令初始化git
git init
-
添加github远程代码仓库
//命令:git remote add origin + 远程代码仓库地址 eg:git remote add origin https://github.com/zhangdaiscott/jeecg-boot.git
-
下载远程仓库代码
//命令:git clone + 远程代码仓库地址 eg:git clone https://github.com/zhangdaiscott/jeecg-boot.git
-
拉取最新代码(不合并本地代码)
eg:git fetch
二.并发编程真实案例
1.CountdowLatch,重写AQS
2.sync +wait+ notifyAll
2.重写CompletableFuture实现并发编程