Oauth2详解
做过几次Oauth2的对接,不管是服务端还是客户端都有一些经验,和大家分享。
一、Oauth2的含义
这个百度都有,就不阐述了,前身是Oauth,我的理解呢就是,很简单。一个例子,大家都用过qq或者微信,你登录其他web、客户端或者app的时候,有很多都会提示你是否用微信登录或者qq登录,我理解这个就是oauth2的过程,互信,兼容其他的sso
二、Oauth2的步骤,三次握手,大家应该都知道。
2.1 第一次握手
从A访问B,B发现了请求来源于A,那么通过web端重定向到A的第一次握手地址附上自己的授权码和重定向地址。
A知道了B正在问他,我能用的登录信息登录吗。
A一看,自己已经登录,并且B使用了自己给他的授权码,那ok,于是又给他返回了一个临时授权码,从web端重新定向到B的地址
2.2 第二次握手
B一看A给了自己临时的授权码,那B应该是已经登录了
B按照当时A给的秘钥还有第二次握手地址,通过服务器向A发起了消息请求,一般这个接口都是http的post请求,当时接口和协议都不重要,理念重要
A通过接口知道了,B用了刚才的授权码,秘钥也正确是本人,那么告诉你真实的秘钥吧,于是给B返回了token
2.3 第三次握手
B拿到了真实的token,心里想着,A应该是已经认可我了,那么快告诉我你到底是谁吧
B再次向A发送了请求,附带了自己的token
A接受请求后,返回当前登录的纳税人信息。
三、Oauth实现方案
3.1 服务端
服务端首先要有一张代码表,记录颁发出去的客户端标识和秘钥
然后要提供三个http接口,一个是浏览器的页面接口,两个服务器的http接口或者其他接口
接口一:浏览器访问,便于服务端记录当前会话,知道登录的人是谁,然后存入数据库或者缓存,返回值应该是客户端提供的重定向地址页面和临时授权码
接口二:提供一个临时授权码换取真实token的接口,其实就是校验客户端标识和秘钥是否正确,返回token
接口三:提供token换取真实登录人信息的接口,查询登录人信息。
3.2 客户端
客户端也有有表或者参数记录,标识和秘钥
然后需要一个拦截器,针对于服务端来源的请求,走oauth2校验
然后就是不断的接口交互发送请求,很简单
四、会话一致性
一般都是服务端保持会话一致性,这个看实际要求。
其实就是两种方案,
一种是接口传递,AB互相通知,我这儿已经注销了,你看看你那边需要注销不,这种一般都是存在负载,并且有session共享
一种是页面重定向或者iframe,在服务端的退出页面调用B服务的退出页面
文档就不上传了,有需要的可以给我留言。