随着互联网的发展,web应用的复杂度也一直在提升,慢慢的单一的web应用已经不能满足复杂的业务需求。例如百度的搜索、新闻、百科、贴吧,其实本质上都是不同的网站。当用户使用这些平台的时候,我们当然不希望用户在每一个平台都有一个单独的账号,不然的话用户和开发者可能都会有想哭的冲动。所以我们就需要一种用户登录一次就可以访问所有相互信任的应用的系统,这种系统我们就管它叫单点登录(sso,Single Sign On)系统。

简单实现

在本系列的上一章的最后一节中我们介绍了基于cookie的认证模式,基于这种模式我们其实很容易实现一个单点登录系统。一般我们同一个系统的多个站点会在同一个顶级域名下(如,.baidu.com.cn),这样我们就可以让这些站点共享同一个顶级域名的cookie。这样只要一个站点登录了,所有的站点就都可以拿到登录认证信息。但是这种做法有两个缺点:

1、我们不一定能够保障我们所有的子系统都在同一个顶级域名下。

2、各个站点要分别实现一套登录认证功能。

鉴权与授权

在讨论如何解决仅仅基于cookie实现的单点登录系统的缺点之前,我们要先讨论另一个话题,就是鉴权与授权的分离。

我们一般说的登录系统指的是:识别用户身份,然后允许用户访问符合其身份权限的资源。这里边其实有两件事,识别用户身份这一步我们称之为鉴权,允许用户访问符合其身份权限的资源这一步我们称之为授权。在传统的单站点应用中,我们很少会将鉴权与授权分开来讨论,因为当时的登录功能简单。可是当代web站点的鉴权与授权都趋于多样化。比如在鉴权的时候我们可以使用账号密码、手机短信验证码、OAuth、人脸识别等等;同样不同站点对于授权的需求和权限的体系都是各不相同的。由于两者的多样化与不同,为了降低耦合,提高内聚,我们就有必要将鉴权与授权过程分开看待。

实现单点登录系统

当我们理解了鉴权与授权的概念之后,我们就很自然的会发现,一般来讲当各站点需要同一套认证体系的时候,其实他们的鉴权体系是统一的,而授权过程则可能各不相同。

我们来思考一下现实生活中我们是如何解决类似的问题的:当我们认定一个人是我们公司的员工的时候,我们就会有一个统一的部门制作和发放给我们员工一张工作证;然后员工更具这张工作证上的信息不同,决定了他在公司各个部门中能干什么不能干什么。

同样的我们可以制作一个统一认证站点来负责鉴权这步。当用户访问我们的一个站点的受保护资源的时候,我们先将用户重定向到统一认证站点;如果用户未登录,则跳到统一认证站点的登录界面进行登录,登录成功之后生成一个用户的身份票据(就像工作证一样),然后将票据信息返回给用户访问的站点;如果用户已登录,则跳过登录步骤,直接将用户的身份票据返回给用户访问的站点;然后不同的站点再根据自己的授权体系,决定用户是否能够访问响应的资源。

这样我们既解决了域名可能不统一的问题,又只需要实现统一分登录认证功能。

身份认证系统(二)多WEB应用的单点登录的更多相关文章

  1. 八幅漫画理解使用JSON Web Token设计单点登录系统

    用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...

  2. 八幅漫画理解使用 JSON Web Token 设计单点登录系统

    原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家 ...

  3. [转]八幅漫画理解使用JSON Web Token设计单点登录系统

    上次在<JSON Web Token - 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家理解如何设计正常的用户认证系 ...

  4. 介绍 ASP.NET Identity - ASP.NET 应用程序的成员身份认证系统

    ASP.NET Identity 是构建 ASP.NET web 应用程序的一种新的身份认证系统.ASP.NET Identity 可以让您的应用程序拥有登录功能,并可以轻松地自定义登录用户的相关数据 ...

  5. 基于DDD + SD.Framework实现的统一身份认证系统

    项目地址 http://git.oschina.net/lishilei0523/ShSoft.UAC 项目说明 本项目开发的目的有三: 1.作为一个使用SD.Framework框架开发的项目样板 2 ...

  6. 中国科学技术大学统一身份认证系统CAS

    CAS | Apereohttps://www.apereo.org/projects/cas 中国科学技术大学统一身份认证系统https://passport.ustc.edu.cn/login?s ...

  7. 身份认证系统(一)单WEB应用的身份认证

    身份认证技术,也就是所谓的登录功能,是现代WEB系统最常见的功能之一.本系列文章就试图为大家详细的介绍身份认证技术. Basic认证模式 Basic认证模式是较早被广泛应用的一种HTTP标准提供的认证 ...

  8. Django用户认证系统(二)Web请求中的认证

    在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...

  9. Django认证系统实现的web页面

    结合数据库.ajax.js.Djangoform表单和认证系统的web页面 一:数据模块 扩展了Django中的user表,增加了自定义的字段 from django.db import models ...

随机推荐

  1. 转:在使用angularjs过程,ng-repeat中track by的作用

    转载:链接 <div ng-repeat="links in slides"> <div ng-repeat="link in links track ...

  2. Struts22222

    一,什么是框架?  所谓框架就是提供了一组统一的接口和编程方式的可以重用组件,同时我们可以在框架中扩充我们自己的特定逻辑. 二,MVC设计模式 将应用程序分为3个部分:模型 Model,视图View, ...

  3. layui-open-上传文件

    <!--选择文件上传--> <script id="upload_file_dialog" type="text/html"> < ...

  4. 通过Application存取公共数据比如登录信息等..

    Android系统在运行每一个程序应用的时候,都会创建一个Application对象,用于存储与整个应用相关的公共变量.一个Android应用只会生成一个Application对象,在不同的Activ ...

  5. 五、angularjs在进入界面前加载数据

    有时候我们需要在页面加载前就要绑定数据,比如有的图片太多就会导致在加载的过程中很慢,或者title是动态的,通过从后台取数据来改变,如果进入页面后在读取数据会导致以页面刷新数据太慢,这样就需要我们在进 ...

  6. 如何激活 Trend Micro Deep Security Agent

    Deep Security 即服务包括反恶意软件保护.防火墙.入侵防御系统和完整性监视.Trend Micro Deep Security Agent (DSA) 可以配合 Deep Security ...

  7. Docker的一些常用命令

    # systemctl start docker //启动docker # systemctl restart docker //重启docker # systemctl enable docker ...

  8. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  9. Python学习---装饰器的学习1210

    装饰器的基础 学习前提: 作用域 + 函数的理解 + 闭包  [学习,理解] 代码编写原则: 对修改开放对扩展开放 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前 ...

  10. JavaScript学习---JavaScript基础知识

    JavaScript的引入方式 JavaScript的引入方式: 1.直接在script里面写: 2.使用<script src="JS的文件位置"> {#1 直接编写 ...