身份认证技术,也就是所谓的登录功能,是现代WEB系统最常见的功能之一。本系列文章就试图为大家详细的介绍身份认证技术。

Basic认证模式

Basic认证模式是较早被广泛应用的一种HTTP标准提供的认证模式。最常见的形式之一就是在url中直接写上用户名密码向服务器提供身份:

http://user:passwd@www.server.com/index.html

在Basic模式之中,每次向服务器请求受保护资源的时候都要在url中带上明文或仅被Base64编码过的用户名密码。而且在这种模式下,如果我们要实现“记住登录状态”功能,就需要将用户名密码这样的敏感信息直接换存在浏览器中。这样就形成了它最主要的两个缺点:

1、每个请求中都要带有用户名和密码凭据

2、安全性堪忧

基于session的认证模式

为了解决每次请求敏感资源都要带有用户名密码凭证的问题,web开发者们形成了一套基本的实践模式,就是将用户认证后的身份存储于服务端管理的会话(session)之中,以此来减少使用过程中对凭据的传输。

用户想要请求受保护资源,先要登录,想服务端发送用户名密码。服务端验证用户名密码成功之后将用户的身份验证标识存储在session 中,然后将sessionId存储在cookie 中。之后当客户再去请求受保护资源的时候,只要携带好cookie中的sessionId就可以验证其身份返回敏感数据了。

这种基于session的认证模式犹豫其简单、方便、好用,所以被广泛使用。但是随着web应用的发展,其也出现了诸多不足:

1、当服务器应用重启时,用户会被强制登出

2、当站点用负载均衡部署多份时,每个站点实例的session无法共享

当然,我们可以使用单独的session存储服务来解决这些问题,但这样会增加系统不小的复杂性与维护成本。

基于cookie的认证模式

既然使用session会产生诸多的问题,那我们是不是可以有一种类似的方案来解决这种问题呢?答案肯定是有的,那就是将认证信息直接存储在客户端的cookie中。

但是存在客户端就会面临着一系列的安全问题,例如,我直接在cookie中以用户id存储标识,那是不是用户自己篡改cookie改称别的用户id就可以切换自己的身份了呢?因此这就要涉及到cookie信息加密和解密。

除了加密与解密以外还有现在常用的一种解决方案:就是存储票据(ticket)。在用户登录成功之后,站点生成一个ticket,一方面将用户身份信息存储在服务端缓存中,以ticket为key;另一方面,将ticket存储到用户的cookie中。这样,用户再要访问敏感信息时,只需要每次都带上自己cookie中的ticket就可以了。这种方法其实和使用session很像,但是因为现在基本上缓存服务已经属于必备的基础组建了,所以并不会增加过多额外的成本,而且缓存服务相比session也比较好做长时间的数据存储。

身份认证系统(一)单WEB应用的身份认证的更多相关文章

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

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

  2. django认证系统 Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  3. OpenSSH的RSA/DSA密钥认证系统

    OpenSSH的RSA/DSA密钥认证系统,它可以代替OpenSSH缺省使用的标准安全密码认证系统. OpenSSH的RSA和DSA认证协议的基础是一对专门生成的密钥,分别叫做私用密钥和公用密钥. 使 ...

  4. 身份认证系统(二)多WEB应用的单点登录

    随着互联网的发展,web应用的复杂度也一直在提升,慢慢的单一的web应用已经不能满足复杂的业务需求.例如百度的搜索.新闻.百科.贴吧,其实本质上都是不同的网站.当用户使用这些平台的时候,我们当然不希望 ...

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

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

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

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

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

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

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

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

  9. 关于ASP.Net Core Web及API身份认证的解决方案

    6月15日,在端午节前的最后一个工作日,想起有段日子没有写过文章了,倒有些荒疏了.今借夏日蒸蒸之气,偷得浮生半日悠闲.闲话就说到这里吧,提前祝大家端午愉快(屈原听了该不高兴了:))!.NetCore自 ...

随机推荐

  1. Ascii码 unicode码 utf-8编码 gbk编码的区别

    ASCII码: 只包含英文,数字,特殊符号的编码,一个字符用8位(bit)1字节(byte)表示 Unicode码: 又称万国码,包含全世界所有的文字,符号,一个字符用32位(bit)4字节(byte ...

  2. express实现todolist

    app.js var express = require('express'); var todoController = require('./controllers/todoController. ...

  3. ccf-201609-2 火车购票

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  4. v-model的双向数据绑定(表单)

    可以用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素 ...

  5. Strapi 安装易错位置

    Strapi官网(https://strapi.io)介绍:最先进的开源内容管理框架,可以毫不费力地构建功能强大的API,建立在Node.js平台之上,为您的API提供高速惊人的表现. 简单点说,(对 ...

  6. 04_zookeeper的watcher机制

    [watcher简述] * zk针对每个节点的操作,都会有一个监督者:watcher * 当监控的某个对象(znode)发生了变化,则出发watcher * zk中的watcher是一次性的,出发后立 ...

  7. How to solve problems

    练习是为了帮助你成长 0.Don't panic! 1.What are the inputs? 2.What are the outputs? 3.Work through some example ...

  8. sqlserver中循环生成记录

    declare @i int set @i=1 while(@i<=10) begin INSERT INTO [BMData].[dbo].[QueryBlackListLogs] ([ID] ...

  9. Google Colab 免费的谷歌GPU for deep learning

    Who wants to use a free GPU for deep learning?Google Colab is a free cloud service and now it suppor ...

  10. Doing Research Needs Efforts

    What is research?   From YouTube Video or baiduyun Links What does not? spend many hours before you ...