由单点登陆到aws的http服务。html
From: https://www.jianshu.com/p/613e44d4a464web
单点登陆SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登陆后,就不用在其余系统中登陆,也就是用户的一次登陆能获得其余全部系统的信任。数据库
单点登陆在大型网站里使用得很是频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操做或交易可能涉及到几十个子系统的协做,若是每一个子系统都须要用户认证,不只用户会疯掉,各子系统也会为这种重复认证受权的逻辑搞疯掉。跨域
实现单点登陆说到底就是要解决如何产生和存储那个信任,再就是其余系统如何验证这个信任的有效性,所以要点也就如下两个:安全
最简单的单点登陆实现方式,是使用cookie做为媒介,存放用户凭证。
用户登陆父应用以后,应用返回一个加密的cookie,当用户访问子应用的时候,携带上这个cookie,受权应用解密cookie并进行校验,校验经过则登陆当前用户。服务器
对于跨域问题,可使用JSONP实现。cookie
最后一种介绍的方式,是经过父应用和子应用来回重定向中进行通讯,实现信息的安全传递。
父应用提供一个GET方式的登陆接口,负载均衡
用户经过子应用重定向链接的方式访问这个接口,微服务
* 若是用户尚未登陆,则返回一个的登陆页面,用户输入帐号密码进行登陆。post
* 若是用户已经登陆了,则生成加密的Token,而且重定向到子应用提供的验证Token的接口,经过解密和校验以后,子应用登陆当前用户。
这种方式较前面两种方式,接解决了上面两种方法暴露出来的安全性问题和跨域的问题,可是并无前面两种方式方便。
安全与方便,原本就是一对矛盾。
下面拿我作过的案例来讲:
例如原始应用的网址是http://localhost:8080/cas-client/,在这个客户端登陆页面里form表单包含登陆用户名和密码,一开始有以下语句,转向CAS服务器的单点登陆页面 https://sso.nubb.com/login?service=http://localhost:8080/cas-client/。
SSO服务器完成主体认证后,会使用下面URL进行重定向 http://localhost:8080/cas-client/?ticket= ST-2-7FahVdQ0rYdQxHFBIkKgfYCrcoSHRTsFZ2w-20。 收到ticket以后,应用程序须要验证ticket。这是经过将ticket 传递给一个校验URL来实现的。校验URL也是SSO服务器提供的。
SSO服务器经过校验路径得到了ticket以后,经过内部的数据库对其进行判断。若是判断是有效性,则返回一个NetID给应用程序。 随后CAS将ticket做废,而且在客户端留下一个cookie。
之后其余应用程序就使用这个cookie进行认证(固然经过CAS的客户端),而再也不须要输入用户名和密码。
相见原文
本文涉及到:http服务负载均衡等任务,例如经过Nginx [ Nginx is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.]
如何利用aws将网站各个功能作成微服务的形式,这是往后的重点。