OAuth认证
OAuth
认证是为了做到第三方应用在未获取到用户敏感信息(如:账号密码、用户PIN等)的情况下,能让用户授权予他来访问开放平台(主要访问平台中的资源服务器Resource Server
)中的资源接口。
其流程主要是:
用户首先要保持登录,即已认证通过的状态
第三方应用请求用户授权(我理解是弹出一个显示的操作界面让用户确认给第三方授权)
用户授权成功之后会向
Authorization Server
(认证服务器)请求“授权码”(指authorization_code
而不是最终的access_token
),请求中还会携带redirect_uri
(跳转至第三方应用的链接)获得“授权码”之后用户所在的浏览器网页将跳转到
redirect_uri
(即第三方应用)第三方应用携带“授权码”和应用认证信息(
client_id
&client_secret
)到Authorization Server
换取access_token
第三方应用就可以在访问开放平台时带上
access_token
SSO单点登录
单点登录是指用户在某个应用系统上登录之后,进入其子应用或相关应用系统可以免去登录步骤,从而实现一次登录,到处操作。这次项目我所负责的正好是单点登录功能模块,所以来更新下实际项目中SSO
的实现流程,我们要实现的效果是,现在有业务服务器a.com
和b.com
,还有SSO
服务器sso.com
,在a.com
上完成登录操作之后访问b.com
时是已登录状态。
用户首次访问
a.com/user
时,到a.com
服务器获取不到session
给用户弹出一个
SSO
的登录页面sso.com/login.html
,这个页面会带上两个参数,分别是开发者平台映射值key
(即某个业务服务器在SSO
所映射的key
)和回调地址redirect
(即登录成功之后跳转到的url
,一般是所发起业务服务器开放的路由)用户输入账号密码之后到
SSO
服务器上进行身份校验,若校验成功则给用户生成一个ticket
,并将该ticket
值及用户基本信息一起创建SSO
服务器session
选择某种加密方式对该请求的
session
进行加密之后生成一个token
值,然后在回调地址redirect
里带上token
参数并跳转回去a.com
服务器a.com
对toke
n参数进行解析后拿到用户基本信息和ticket
值,相应地初始化本地session
并将ticket
值也记录下来用户再次访问
a.com/user
或其他页面的时候,到a.com
上获取session
并到sso.com
上校验ticket
值得有效性,两个操作都成功之后才返回用户信息;若校验ticket
值失败,则重新要求用户进行登录操作,即从步骤1开始现在用户在
a.com
上的登录和访问流程已完成,那这时用户访问b.com/user
,到b.com
上获取不到session
,则会重定向到sso.com/session
,因为之前a.com
已在sso.com
上登录过,故请求sso.com/session
的时候SSO
服务器能将session
中用户信息和ticket
值返回给b.com
b.com
获取到用户信息和ticket
值之后和a.com
做相同的事情即可,这样就完成了单点登录的整个流程
单点登出则是指用户只要在a.com
服务器上进行登出操作,则在其他业务服务器如b.com
上也应处于未登录状态,单点登录流程的步骤6中提到每次用户访问业务服务器路由检验用户当前状态时不仅仅查找本地有没有session
,还要到SSO
服务器上校验ticket
值的有效性,所以只要有一个业务服务器登出时令ticket
失效即可。
现在用户是登录状态,他从
a.com
进行了退出操作,则自然a.com
已将其session
清除a.com
服务器同时还要携带ticket
值发请求到sso.com
将对应的记录清除当访问某个
b.com
某个页面时,虽然在b.com
服务器上获取到session
,此外还需要到SSO
服务器上校验一遍ticket
值,而发现ticket
值校验失败,则会提示用户当前处于未登录状态这样相当于
b.com
也已经是退出登录,完成了单点登出的整个流程
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。