随着互联网的发展,web应用的复杂度也一直在提高,慢慢的单一的web应用已经不能知足复杂的业务需求。例如百度的搜索、新闻、百科、贴吧,其实本质上都是不一样的网站。当用户使用这些平台的时候,咱们固然不但愿用户在每个平台都有一个单独的帐号,否则的话用户和开发者可能都会有想哭的冲动。因此咱们就须要一种用户登陆一次就能够访问全部相互信任的应用的系统,这种系统咱们就管它叫单点登陆(sso,Single Sign On)系统。html
在本系列的上一章的最后一节中咱们介绍了基于cookie的认证模式,基于这种模式咱们其实很容易实现一个单点登陆系统。通常咱们同一个系统的多个站点会在同一个顶级域名下(如,.baidu.com.cn),这样咱们就可让这些站点共享同一个顶级域名的cookie。这样只要一个站点登陆了,全部的站点就均可以拿到登陆认证信息。可是这种作法有两个缺点:web
一、咱们不必定可以保障咱们全部的子系统都在同一个顶级域名下。cookie
二、各个站点要分别实现一套登陆认证功能。网站
在讨论如何解决仅仅基于cookie实现的单点登陆系统的缺点以前,咱们要先讨论另外一个话题,就是鉴权与受权的分离。ui
咱们通常说的登陆系统指的是:识别用户身份,而后容许用户访问符合其身份权限的资源。这里边其实有两件事,识别用户身份这一步咱们称之为鉴权,容许用户访问符合其身份权限的资源这一步咱们称之为受权。在传统的单站点应用中,咱们不多会将鉴权与受权分开来讨论,由于当时的登陆功能简单。但是当代web站点的鉴权与受权都趋于多样化。好比在鉴权的时候咱们可使用帐号密码、手机短信验证码、OAuth、人脸识别等等;一样不一样站点对于受权的需求和权限的体系都是各不相同的。因为二者的多样化与不一样,为了下降耦合,提升内聚,咱们就有必要将鉴权与受权过程分开看待。htm
当咱们理解了鉴权与受权的概念以后,咱们就很天然的会发现,通常来说当各站点须要同一套认证体系的时候,其实他们的鉴权体系是统一的,而受权过程则可能各不相同。blog
咱们来思考一下现实生活中咱们是如何解决相似的问题的:当咱们认定一我的是咱们公司的员工的时候,咱们就会有一个统一的部门制做和发放给咱们员工一张工做证;而后员工更具这张工做证上的信息不一样,决定了他在公司各个部门中能干什么不能干什么。资源
一样的咱们能够制做一个统一认证站点来负责鉴权这步。当用户访问咱们的一个站点的受保护资源的时候,咱们先将用户重定向到统一认证站点;若是用户未登陆,则跳到统一认证站点的登陆界面进行登陆,登陆成功以后生成一个用户的身份票据(就像工做证同样),而后将票据信息返回给用户访问的站点;若是用户已登陆,则跳过登陆步骤,直接将用户的身份票据返回给用户访问的站点;而后不一样的站点再根据本身的受权体系,决定用户是否可以访问响应的资源。开发
这样咱们既解决了域名可能不统一的问题,又只须要实现统一分登陆认证功能。域名
转:https://www.cnblogs.com/meibaorui/p/9176772.html