Atitit 第三方登录与sso单点登录
单点登录:
我们的单点登录系统,主要包含了登录验证,token校验 、注销、注册几大功能,单点登录系统提供了统一的登录和注册页面,提供了统一的登录token校验接口。单点登录的主要原理就是在登录成功以后,生成一个令牌,这个领跑要求每次登录唯一不可重复,我们就简单的用料一个随机的UUID,因为我们的系统在部署时,各个模块搜索通过nginx映射到痛同一个一级域名下的,cookie只要把他的作用域设置成一级域名,就可以在所有同一个一级以及域名下的模块中共享,所以我们把随机生成的token,以字符串“token”为key,放在cookie里边,然后用生成的token做key,用户对象信息转换成json字符串后,作为value,放到redis里边,都设置有效期30分钟;截到统一的登录页面,并把进入拦截到的URL放入cookie里边,方便登录成功以后,获取这个URL,进行原路径跳转,而不是每次登录都进入首页,提供用于的体验度。如果返回用户信息,则说明已经登录,模块创建的session,并放行url。统一校验token的接口的主要流程是,首先从cookie新设置一遍(这个是为了刷新有效期);这样就实现了多个模块只需要登录一次就可以的流程,还有就是注销,注销也是调用统一的注销接口,注销是需要首先从cookie中获取token,根据token删除redis中的用户信息,然后在删除cookie中的token。
---------------------
第三方登录:
第三方登录,我的理解就是基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能,遵循一个Oauth2.0国际通用协议,允许用户在不提供用户名和密码的情况下,让第三方应用访问一些资源。使用第三方登录时,我们不需要用户再次输入用户名和密码,而是通过一个唯一的openID来进行授权登录,对于普通用户来说,如果能用QQ、微信、百度、新浪这些平台的账号一键注册登录各个平台,无疑会方便很多。对于我们的应用来说,通过授权,借助QQ,微信这些用户量比较大的第三方平台增强自己的知名度也是非常划算。我们的平台集成了,QQ,微信,百度,新浪四种第三方登录方式,实现的方式都是类似的。首先去各大开放平台进行注册成为开发者,并创建应用,填写回调地址,获
---------------------
3、单点登录SSO(Single Sign On)
对于分布式系统来说,我们需要sso这样一个用于单点登录的系统,可以独立部署在一个web服务器内,比如域名为 login.abc.com,其他所有web服务上的登录都可以通过这个sso来登录,app也可以调用登录
如果,所有的token都由sso来管理,这个token在浏览器可以存储在第一方cookie或者第三方都行,在ios或者安卓上也能够保持,每次访问服务的时候放入headers中,让拦截器进行验证即可。同时,这个token也可以扩展用来做权限。
4、手机端的单点登录
这个不难理解,就像微信那样,同一个用户只能在同一个手机端上登录,这个是用token+缓存就能实现,套用上面所说的拦截器,可以不需要写很多代码就能实现。
5、代码实现以及部署
常见的有两种情况,一种是SSO(单点登录)效果是一次输入密码多个网站可以识别在线状态;还有一种是多平台登录,效果是可以用一个账号(比如QQ账号)登录多个不同的网站。
SSO与多平台登录
SSO一般用于同一单位的多个站点的登陆状态保持,技术上一般参考CAS协议;多平台登录一般是Oauth体系的协议,有多种认证模式但是不具备会话管理和状态保持。不过从本质上讲,我觉得两者都是通过可信的第三方进行身份验证,如果说同一单位的多个子系统共同只围绕一个第三方账户(可以称为认证中心)进行多平台登录验证,那么在第三方平台登录后再访问其他网站,效果和统一登录是差不多的。此外,Oauth2还有个好处就是可以实现跨平台的登录管理,因为他的认证过程不依赖于session和cookie,比如对于移动端设备,以及在前后端分离后这种登录认证方式也可以起到很大作用。
oauth2的基本概念
在Oauth中至少是有用户,应用服务器,认证服务器这几个角色在交互。OAuth的作用就是让"客户端"安全可控地获取"用户"的授权,与"应用服务器"进行互动。
OAuth2的基本流程
- 用户通过浏览器访问一个应用,比如我要上慕课网学习。
- 网站要求我登录,我选择使用QQ登录,这里的QQ登录就是那个认证服务器。
- 这个时候慕课提供的QQ登录链接会把我带到QQ登录页面
- 在QQ的登录页面完成登录后,选择授权,也就是允许慕课网获取我的资料。
这个时候我们看到浏览器经过几次跳转后返回慕课网,这个时候我们已经完成了登录。
重点在于几次跳转的过程中,慕课网和QQ登录的服务之间还有过几次交互。
1.我们选择了授权的时候QQ登录服务器会根据慕课跳转到QQ时候给出的重定向链接返回给慕课网一个code,这个code代表QQ的登录服务器认可慕课网这个应用服务器的这个请求是合法的予以放行.
2.慕课这个时候就会用这个code再次向QQ登录服务发起请求服务令牌(token)。
3.拿到这个令牌之后,接下来慕课需要用户的一些基本信息时就可以通过在向QQ服务提交的请求头里带上这个令牌,令牌验证通过就可以拿到用户资源。
这一部分的操作是应用服务器和验证服务器之间的交互,这个过程对用户是透明的。这个过程中慕课网是不需要知道用户的账号密码也可以完成对用户身份的认证,这个token就可以用来标识用户资源。官方的运行流程图是这样的:
OAuth的几种认证模式
上述讲的是OAuth2中支持的授权码(CODE)方式的认证流程,也是其支持的四种认证方式里最复杂的,其他的三种种包括:
简化模式(implicit),(在redirect_uri 的Hash传递token; Auth客户端运行在浏览器中,如JS,Flash)
密码模式(resource owner password credentials),将用户名,密码传过去,直接获取token;
客户端模式(client credentials),无用户,用户向客户端注册,然后客户端以自己的名义向'服务端'获取资源;详细的OAuth2资料参考理解OAuth 2.0|阮一峰的网络日志分别适用不同场景,复杂度也比授权码模式要低,所以这里就只说说授权码模式的具体过程。
单点登录的三种实现方式 - Jason的专栏 - CSDN博客.html
SSO单点登录的发展由来以及实现原理 - 阿里云.html