- redis存储
unordered_map<account,string> appID
unordered_map<appID,string> account
[code:${string}]=appID+"_"+account+"_"+scope
[token:${string}]=appID+"_"+account+"_"+scope
[refresh:${string}]=appID+"_"+account+"_"+scope
- 场景
user_info
修改,通过unordered_map<appID,string> account
把所有[code:${string}]
、[token:${string}]
、[refresh:${string}]
删除oauth_info
修改,通过unordered_map<account,string> appID
把所有[code:${string}]
、[token:${string}]
、[refresh:${string}]
删除- 请求授权码,验证
account
与password
与appID
,验证其他参数,如果原先appID[account]、account[appID]
有值s_old
,那么应该取旧值并删除[code:${s_old}]
、[token:${s_old}]
、[refresh:${s_old}]
,生成s1
,appID[account]=s1
、account[appID]=s1
、[code:${s1}]=appID+"_"+account+"_"+scope
,返回是s1即code - 请求令牌,验证
appID
与appSecret
与code
,验证其他参数,从[code:${s1}]=appID+"_"+account+"_"+scope
拿到appID
、account
,删除[code:${s1}]=appID+"_"+account+"_"+scope
,生成s2
与s3
,appID[account]=account[appID]=s2+s3
、[token:${s2}]=[refresh:${s3}]=appID+"_"+account+"_"+scope
,返回s2
即token
,s3
即refresh_token
- 刷新令牌,验证
appID
与refresh_token
,从[refresh:${refresh_token}]
中获取appID
、account
,新生成ss2
与ss3
,appID[account]=account[appID]=ss2+ss3
、[token:${ss2}]=[refresh:${ss3}]=appID+"_"+account+"_"+scope
,返回ss2
即token
,ss3
即refresh_token
- 申请资源,验证
appID
与token
,从[token:${string}]=appID+"_"+account+"_"+scope
中拿scope
,之后去对应的account
中拿对应的scope
- s1哈希后成为code的key,s2+s3逆哈希后,s2哈希后成为token的key,s3哈希后成为refresh的key,存的都是哈希过后的值,返回给客户端的都是没有加密的值