让每一个人品质就业不再难
天眼ERP 全国咨询电话 13362162602

动态中心

DYNAMIC CENTERING

最新干货 | Oauth如何实现第三方登录?马上点开查看答案!

发布时间: 2021-09-30 16:43:58


Oauth第三方登录实现


- 最新干货 -




很多网站登录时,允许使用第三方网站的身份,这称为"第三方登录"。


所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。


那么这个流程究竟是如何实现的?具体步骤又是怎样的?



一、OAuth认证



OAuth认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码、用户PIN等)的情况下,能让用户授权予它来访问开放平台(主要访问平台中的资源服务器Resource Server)中的资源接口




1


用户首先要保持登录,即已认证通过的状态。



2


第三方应用请求用户授权(弹出一个显示的操作界面让用户确认给第三方授权)



3


用户授权成功之后会向Authorization Server(认证服务器)请求“授权码(authorization_code)


而不是最终的access_token,请求中还会携带redirect_uri(跳转至第三方应用的链接)



4


获得“授权码”之后用户所在的浏览器网页将跳转redirect_uri(即第三方应用)。



5


第三方应用携带“授权码”和应用认证信息(client_id & client_secret)到Authorization Server换取access_token。



6


第三方应用就可以在访问开放平台时带上access_token






二、SSO单点登录




单点登录是指用户在某个应用系统上登录之后,进入其子应用或相关应用系统可以免去登录步骤,从而实现一次登录到处操作



实际项目中SSO的实现流程是什么样的?首先我们要明白实现效果是什么。



有业务服务器a.com和b.com,SSO服务器sso.com,在a.com上完成登录操作之后访问b.com时是已登录状态。




1


用户首次访问a.com/user时,到a.com服务器获取不到session。



2


给用户弹出一个SSO的登录页面sso.com/login.html。


这个页面会带上两个参数,分别是开发者平台映射值key(即某个业务服务器在SSO所映射的key)回调地址redirect(即登录成功之后跳转到的url,一般是所发起业务服务器开放的路由)



3


用户输入账号密码之后到SSO服务器上进行身份校验,若校验成功则给用户生成一个ticket,并将该ticket值及用户基本信息一起创建SSO服务器session。


4


选择某种加密方式对该请求的session进行加密之后生成一个token值,然后在回调地址redirect里带上token参数并跳转回去a.com服务器。



5


a.com对token参数进行解析后拿到用户基本信息和ticket值,相应地初始化本地session并将ticket值也记录下来。



6


用户再次访问a.com/user或其他页面的时候,到a.com上获取session并到sso.com上校验ticket值得有效性,两个操作都成功之后才返回用户信息。


若校验ticket值失败,则重新要求用户进行登录操作,即从步骤1开始。



7


用户在a.com上的登录和访问流程已完成。


这时用户访问b.com/user,到b.com上获取不到session,则会重定向到sso.com/session,因为之前a.com已在sso.com上登录过,故请求sso.com/session的时候SSO服务器能将session中用户信息和ticket值返回给b.com。


8



b.com获取到用户信息和ticket值之后和a.com做相同的事情即可,这样就完成了单点登录的整个流程。







三、单点登出




单点登出则是指用户只要在a.com服务器上进行登出操作,则在其他业务服务器如b.com上也应处于未登录状态。



单点登录流程的步骤6中提到每次用户访问业务服务器路由检验用户当前状态时不仅仅查找本地有没有session,还要到SSO服务器上校验ticket值的有效性,所以只要有一个业务服务器登出时令ticket失效即可。



1


现在用户是登录状态,它从a.com进行了退出操作,则自然a.com已将其session清除



2


a.com服务器同时还要携带ticket值发请求到sso.com将对应的记录清除



3


当访问某个b.com某个页面时,在b.com服务器上获取到session。


此外还需要到SSO服务器上校验一遍ticket值,而发现ticket值校验失败,则会提示用户当前处于未登录状态


这样相当于b.com也已经是退出登录,完成了单点登出的整个流程。






服务热线

13362162602

微信服务号