HTTP Basic, Session, Token 三种认证方法简介

2023-05-16

1. 概述

本文简介 HTTP Basic,Session,Token 三种认证方法。

  • Basic 认证:户籍部门已给你签发了一张身份证。你每次去办事,都要带上身份证证,后台要拿你的身份证去系统上查一下。
  • Session 认证:户籍部门已给你签发了一张身份证,但只告诉你身份证号码。你每次去办事,只要报出你的身份证号码,后台要查一个即否有效。
  • Token 认证:户籍部门已给你签发了一张有防伪功能的身份证。你每次去办事,只要出示这张卡片,它就知道你一定是自己人。

2. HTTP Basic 认证

这是一种最基本的认证方法。

在这种认证方法下,用户每次发送请求时,请求头中都必须携带能通过认证的身份信息。

其交互过程如下:

  1. 开始时,客户端发送未携带身份信息的请求。
  2. 服务端返回 401 Unauthorized 状态,并在返回头中说明要用 Basic 方法进行认证: WWW-Authenticate: Basic
  3. 客户端重新发送请求,并将身份信息包含在请求头中: Authorization: Basic aHk6bXlwYXNzd29yZA==
  4. 服务端验证请求头中的身份信息,并相应返回 200 OK 或 403 Forbidden 状态。
  5. 之后,客户端每次发送请求都在请求头中携带该身份信息。
客户端                                                          服务端
------                                                          ------

1----------------------------------------->
GET / HTTP/1.1

                                           <-------------------------2
                                            HTTP/1.1 401 Unauthorized
                                            WWW-Authenticate: Basic

3----------------------------------------->
GET / HTTP/1.1
Authorization: Basic aHk6bXlwYXNzd29yZA==

                                            <------------------------4
                                                       HTTP/1.1 200 OK

5----------------------------------------->
GET /another-path/ HTTP/1.1
Authorization: Basic aHk6bXlwYXNzd29yZA==

其中传送的身份信息是 <username>:<password> 经 base64 编码后的字串。如本例中的 aHk6bXlwYXNzd29yZA==, 经 base64 解码后为 hy:mypassword

这种认证方法的优点是简单,容易理解。

缺点有:

  • 不安全:认证身份信息用明文传送,因此需结合 https 使用。
  • 效率低:服务端处理请求时,每次都需要验证身份信息,如用户名和密码。

3. Session 认证

这种认证方法结合了 Session 和 Cookie。服务端将本次会话信息以 Session 对象的形式保存在服务端的内存、数据库或文件系统中,并将对应的 Session 对象 ID 值 SessionID 以 Cookie 形式返回给客户端,SessionID 保存在客户端的 Cookie 中。

这是一种有状态的认证方法:服务端保存 Session 对象,客户端以 Cookie 形式保存 SessionID。

其交互过程如下:

  1. 客户端在登录页面输入身份信息,如用户名/密码。
  2. 服务端验证身份信息,通过后生成一个 Session 对象,保存到服务端,并将 SessionID 值以 Cookie 形式返回给客户端。
  3. 客户端将接收到的 SessionID 保存到 Cookie 中,并且之后每次请求都在请求头中携带 SessionID Cookie。
  4. 服务端从请求的 Cookie 中获取 SessionID,并查询其对应的 Session 对象,从而获得身份信息。
  5. 客户端退出本次会话后,客户端删除 SessionID 的 Cookie,服务端删除 Session 对象。
  6. 如果客户端之后要重新登录,需重新生成 Session 对象和 SessionID。

优点:

  • 较安全:客户端每次请求时无需发送身份信息,只需发送 SessionID。
  • 较高效:服务端无需每次处理请求时都要验证身份信息,只需通过 SessionID 查询 Session 对象。

缺点:

  • 扩展性差,Session 对象保存在服务端,如果是保存在多个服务器上,有一致性问题,如果保存在单个服务器上,无法适应用户增长。
  • 基于 Cookie 的 SessionID 不能跨域共享,同一用户的多个客户端(如浏览器客户端和 APP)不能共享 SessionId。
  • 基于 Cookie 的 SessionID 易被截获生成 CSRF 攻击。

4. Token 认证

这是一种 SPA 应用和 APP 经常使用的认证方法。它是一种无状态的认证方法。

客户端首先将用户信息发送给服务端,服务端根据用户信息+私钥生成一个唯一的 Token 并返回给客户端。Token 只保存在客户端,之后客户端的每个请求头中都携带 Token,而服务端只通过运算(无需查询)来验证用户。

客户端                                                          服务端
------                                                          ------

1----------------------------------------->
GET / HTTP/1.1

                                           <-------------------------2
                                            HTTP/1.1 401 Unauthorized
                                            WWW-Authenticate: Token

3----------------------------------------->
GET / HTTP/1.1
Authorization: Token f613d789819ff93537ee6a

                                            <------------------------4
                                                       HTTP/1.1 200 OK

5----------------------------------------->
GET /another-path/ HTTP/1.1
Authorization: Token f613d789819ff93537ee6a

优点:

  • Token 只保存在客户端,因此不影响服务端扩展性。
  • 为用户生成的 Token 可以在多个客户端共用。

缺点:

  • Token 包含了用户的全部信息,不只是如 SessionID 类似的一个 ID 值,因此会增加每次请求包的大小。

目前使用较多的是基于JWT(JSON Web Tokens) 的 Token 认证法。

资源

  • Django for beginners
  • Session、Token身份验证方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP Basic, Session, Token 三种认证方法简介 的相关文章

随机推荐

  • WinSock API网络编程——UDP协议(http://www.impcas.ac.cn/usr/lujun/browse.asp?id=winsock_udp)

    WinSock API网络编程 UDP协议作者 xff1a 陆军 Email xff1a ldlujun 64 163 com 时间 xff1a 2004 11 14UDP协议 xff08 User Datagram Protocol xf
  • Raspberry 静态IP配置

    前言 Raspberry 在使用过程中 xff0c 需要手动设定静态IP地址 xff0c 但是深入下去发现不同的raspberry版本不同 xff0c 设置上也存在差异 etc network interfaces 在之前的文章 Raspb
  • 【硬件】调试经验:串口RS232不通,怎么办

    写作时间 xff1a 2020 07 24 目录 xff1a 1 关键词 2 坑坑坑 xff08 不要跳 xff09 3 小技巧与说明 正文 xff1a 1 关键词 串口 串口助手上位机 usb转232线缆 串口命令 RS232 2 检查点
  • 【Github】git bash无法复制粘贴

    参考教程https www cnblogs com slw0113 p 15602715 html 使用git bash时只能使用手工敲击所有命令 xff0c 非常不方便 1 在屏幕右键打开git bash命令窗口 2 在左上角右键 xff
  • 报错{“msg“:“invalid token“,“code“:401}问题的解决

    报错 msg invalid token code 401 问题的解决 xff1a 解决办法 xff1a 将精确的路由放在最上面 xff0c 模糊的路由放在最下面 xff0c 防止精确的路由被覆盖
  • Android 电池管理系统

    https blog csdn net bhj1119 article details 52947344 Android电池服务的源码结构 Framework base services java com android server Sy
  • eBPF技术介绍

    前言 eBPF起源于linux内核 xff0c 它可以以砂箱程序运行在操作系统内核的特权上下文 xff0c 高效 xff0c 安全 xff0c 易于扩展而不需要修改内核源码或者加载内核模块 操作系统一直是实现观测 xff0c 安全和网络功能
  • eBPF开发工具链

    有几个开发工具链可以帮助开发和管理eBPF程序 它们都满足了用户的不同需求 xff1a bcc BCC是一个框架 xff0c 使用户能够编写嵌入其中的eBPF程序的python程序 该框架主要针对涉及应用程序和系统分析 跟踪的用例 xff0
  • Off-CPU分析

    前言 性能问题可以分为两种类型 xff1a On CPU xff1a 线程花时间在CPU上运行的地方 xff1b Off CPU xff1a 在I O xff0c 锁 xff0c 计数器 xff0c 分页 交换上阻塞等待的时间 Off CP
  • uint8_t / uint16_t / uint32_t /uint64_t数据类型详解

    https blog csdn net bruce 0712 article details 72805903
  • 什么是系统调用?为什么要用系统调用?

    什么是系统调用 Linux内核中设置了一组用于实现各种系统功能的子程序 xff0c 称为系统调用 用户可以通过系统调用命令在自己的应用程序中调用它们 从某种角度来看 xff0c 系统调用和普通的函数调用非常相似 区别仅仅在于 xff0c 系
  • android的surfaceflinger原理学习

    概念 SurfaceFlinger是一个系统服务 xff0c 如 xff1a audioflinger xff0c audiopolicyservice等等 xff0c 系统的主要服务通过这个文章进行了解 xff0c Android的系统服
  • labview界面分隔和自定义窗口大小

    gt gt gt gt gt gt 我的博客目录导航 转自 statemic LabVIEW程序界面的布局 控件的显示效果与监视器是密切相关的 xff0c 因此在程序设计时需要考虑目标监视器的颜色 分辨率等因素 xff0c 并明确运行该应用
  • CAN通信矩阵的理解(CAN报文信号的属性)

    CAN通信矩阵 1 CAN通信矩阵是什么 CAN通信矩阵 xff08 CAN Communication Matrix xff09 通常由整车厂完成定义 xff0c 车辆网络中的各个节点需要遵循该通讯矩阵才能完成信息的交互和共享 我们知道C
  • Android OMX介绍(总括)

    一 OpenMax简介 xff08 缩写为 xff1a OMX xff09 OpenMAX是一个多媒体应用程序的标准 由NVIDIA公司和Khronos 在2006年推出 它是无授权费的 跨平台的C语言程序接口序列 xff0c 这些接口对音
  • 从此以后谁也别说我不懂LDO了

    LDO是个很简单的器件 xff0c 但是我跟客户沟通的过程中 xff0c 发现客户工程师的技术水平参差不齐 xff0c 有的工程师只是follow 别人以前的设计 xff0c 任何原理和设计方法都不懂 xff0c 希望大家看完这篇文章都能成
  • 屏下指纹技术实现方案与原理

    1月24日 xff0c 全球第一台量产的屏幕指纹手机vivo X20 Plus屏幕指纹版正式在北京亮相 据悉 xff0c 该手机屏幕指纹版已经支持支付宝和微信的指纹支付 vivo X20 Plus屏下指纹 xff0c 其原理是利用光电反射技
  • linux系统的休眠与唤醒简介

    系统挂起 xff08 Suspend xff09 是电源管理 xff08 APM amp ACPI xff09 的一个特性 xff0c 给用户带来了很大的方便 Linux在2 6系列核心中对电源管理有了较好的支持 xff0c 下面就谈谈Li
  • 奇偶校验的概念

    奇偶校验 Parity Check 是一种校验代码传输正确性的方法 根据被传输的一组二进制代码的数位中 34 1 34 的个数是奇数或偶数来进行校验 采用奇数的称为奇校验 xff0c 反之 xff0c 称为偶校验 采用何种校验是事先规定好的
  • HTTP Basic, Session, Token 三种认证方法简介

    1 概述 本文简介 HTTP Basic xff0c Session xff0c Token 三种认证方法 Basic 认证 xff1a 户籍部门已给你签发了一张身份证 你每次去办事 xff0c 都要带上身份证证 xff0c 后台要拿你的身