常见Web认证方式对比

认证是一个在用户或者设备在访问一个受限的系统时,鉴定用户凭据的过程,即确认“你是谁”的问题。最常见的认证用户的方式是通过用户名和密码的形式进行校验,目前存在多种校验方式,本文将对其进行一个简单的对比,使得大家能够有一个较为完整的了解。

Basic认证

基本身份验证内置于 HTTP 协议中,是最基本的身份验证形式。它使用 HTTP 标头,以便在向服务器发出请求时提供用户名和密码

"Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=" your-website.com

用户名和密码不加密。相反,用户名和密码会用:符号连接起来,形成一个字符串:username:password。然后使用 base64 对该字符串进行编码。这种方法是无状态的,因此客户端必须在每次请求时提供凭据。它适用于不需要持续会话的 API 调用和简单的身份验证工作流。

工作流

  • 未经身份验证的客户端请求受限资源
  • HTTP 401 未认证会返回一个值为 Basic 的 WWW-Authenticate 标头。
  • WWW-Authenticate:Basic 头信息会使浏览器弹框显示用户名和密码,供用户输入凭据。
  • 输入凭据后,每次请求都会在标头中发送凭据:Authorization:Basic dcdvcmQ=

优势

  • 由于操作不多,使用这种方法认证速度更快。
  • 易于实施。
  • 所有主流浏览器都支持。

劣势

  • Base64 与加密不同。它只是表示数据的另一种方式。base64 编码的字符串很容易被解码,因为它是以纯文本发送的。这种特性会导致多种类型的攻击。因此,HTTPS/SSL 是绝对必要的。
  • 每次请求都必须发送凭证。
  • 用户只能通过重写无效的凭据才能注销。

Diget认证

HTTP 摘要验证(或摘要访问验证)是 HTTP Basic验证的一种更安全的形式。主要区别在于密码是以 MD5 散列形式发送,而不是以纯文本形式发送,因此比基本认证更安全。

工作流

  • 未经身份验证的客户端请求受限资源
  • 服务器生成一个称为 nonce 的随机值,并发回一个 HTTP 401 未授权状态和一个 WWW-Authenticate 标头,该标头的值与 nonce 一起为 Digest: WWW-Authenticate: Digest nonce="44f0437004157342f50f935906ad46fc"
  • WWW-Authenticate: Diget标头会使浏览器显示用户名和密码提示
  • 输入凭据后,密码将被散列,然后在每次请求时连同 nonce 一起在标头中发送: Authorization:Digest         username="username",nonce="16e30069e45a7f47b4e2606aeeb7ab62", response="89549b93e13d438cd0946c6d93321c52"
  • 有了用户名,服务器就能获取密码,将其与nonce一起散列,然后验证散列是否相同.

优势

  • 由于密码不会以纯文本形式发送,因此比基本认证更安全。
  • 易于实施。
  • 所有主流浏览器都支持。

劣势

  • 每次请求都必须发送凭据(与Basic的方式一样)。
  • 用户只能通过重写无效的凭据才能注销。
  • 与Basic认证相比,密码在服务器上的安全性较低,因为不能使用 bcrypt。
  • 易受中间人攻击。

基于Session的认证

使用基于会话的验证(或会话 cookie 验证或基于 cookie 的验证)时,用户的状态存储在服务器上。它不要求用户在每次请求时提供用户名或密码。相反,在登录后,服务器会验证凭据。如果有效,服务器会生成一个会话,将其存储在会话存储区中,然后将会话 ID 发回给浏览器。浏览器会将会话 ID 存储为 Cookie,在向服务器发出请求时随时发送。

基于会话的身份验证是有状态的。每次客户端请求服务器时,服务器都必须在内存中找到会话,以便将会话 ID 与相关用户联系起来。

工作流

优势 

  • 后续登录更快,因为不需要凭据。
  • 改善用户体验。
  • 相当容易实现。许多框架开箱即提供此功能。

劣势

  • 它是有状态的。服务器会在后端跟踪每个会话。用于存储用户会话信息的会话存储需要在多个服务间共享,以实现身份验证。正因为如此,它不能很好地用于 RESTful 服务,因为 REST 是一种无状态协议。
  • 即使不需要身份验证,每次请求也会发送 Cookie。
  • 易受 CSRF 攻击

 基于Token的认证

这种方法使用令牌而不是 cookie 来验证用户。用户使用有效凭证进行身份验证,服务器返回一个签名令牌。该令牌可用于后续请求。

最常用的令牌是 JSON 网络令牌(JWT),关于JWT的详细介绍,请查看JWT简介-CSDN博客

令牌无需保存在服务器端。只需使用其签名进行验证即可。近来,由于 RESTful API 和单页面应用程序(SPA)的兴起,令牌的采用率越来越高。

工作流

优势

  • 它是无状态的。服务器不需要存储令牌,因为可以使用签名进行验证。由于不需要查找数据库,因此请求速度更快。
  • 适用于需要验证多个服务的微服务架构。我们只需在每一端配置如何处理令牌和令牌密文。

劣势

  • 根据客户端保存令牌的方式,它可能会导致 XSS(通过 localStorage)或 CSRF(通过 cookies)攻击。
  • 令牌不能删除。它们只能过期。这就意味着,如果令牌被泄露,攻击者可以滥用令牌直到过期。因此,将令牌过期时间设置得很小很重要,比如 15 分钟。
  • 刷新令牌需要设置为在到期时自动发放令牌。
  • 删除令牌的一种方法是创建一个将令牌列入黑名单的数据库。这会增加微服务架构的额外开销,并引入状态。

 在本文中,我们介绍了多种不同的网络身份验证方法,这些方法各有利弊。什么时候应该使用每种方法?这取决于具体情况!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

160相交链表

解法1: public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {// 定义两个指针。// 获得两个链表的长度,将较长的链表先用指针移动到和短链表一样的长度。// 再一个个比较ListNode l1 headA, l2 headB;int …

在我们的大数据平台(XSailbaot)上进行企业级数据建模的思路

1. 背景 笔者所在的公司是差不多二十年前搞CIM(公共信息模型的)起家的。当时公司的前辈搞了基于CIS协议的模型服务器、数据服务器、模式编辑器等,形成了一套基于公共信息模型建模的平台系统。其中可视化建模,建好了模式类以后&am…

Kotlin中对空的很多处理

代码图片直观效果 逐行解释Kotlin中对空的各种情况的使用 private fun testNull() {val flag 1var name: String? nullvar user: User? // 有警告, 因为下面的赋值可以和这一行定义合并var zhangUser: User? User()var wangUser: User User() // 提示Explicitly given t…

AttGAN实验复现 2024

AttnGAN 代码复现 2024 文章目录 AttnGAN 代码复现 2024简介环境python 依赖数据集TrainingPre-train DAMSMTrain AttnGAN SamplingB_VALIDATION 为 False (默认)B_VALIDATION 为 True 参考博客 简介 论文地址: https://arxiv.org/pdf/1711.10485.pdf 代码 python…

C++: 如何用C语言实现C++的虚函数机制?

前言 在 googletest的源码中,看到gtest-matchers.h 中实现的MatcherBase 类自定义了一个 VTable,这种设计实现了一种类似于C虚函数的机制。C中的虚函数机制实质上就是通过这种方式实现的,本文用c语言自定义虚函数表VTable实现了一下virtual的…

Workerman在线客服系统源码,附搭建教程

源码介绍: Workerman在线客服系统源码。 workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天…

240630_昇思学习打卡-Day12-Transformer中的Multiple-Head Attention

240630_昇思学习打卡-Day12-Transformer中的Multiple-Head Attention 以下为观看大佬课程及查阅资料总结所得,附大佬视频链接:Transformer中Self-Attention以及Multi-Head Attention详解_哔哩哔哩_bilibili,强烈建议先去看大佬视频&#xff…

python解锁图片相似度的神奇力量

在这个信息爆炸的时代,图片成为了我们传递信息、表达情感和记录生活的重要方式。然而,面对海量的图片资源,如何快速准确地找到相似的图片,成为了一个亟待解决的问题。现在,让我们为您揭开图片相似度的神秘面纱,带您领略这一创新技术的魅力! 图片相似度技术,就像是一位…

docker harbor仓库搭建,主从库复制

背景:需要主机安装docker-ce和docer-compose #1.安装相关依赖. yum install -y yum-utils device-mapper-persistent-data lvm2 #2.下载官方的docker yum源文件 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo …

10款好用不火的PC软件,真的超好用!

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/市场上有很多软件,除了那些常见的大众化软件,还有很多不为人知的小众软件,它们的作用非常强大,简洁…

cJSON源码解析之add_item_to_object函数

文章目录 前言add_item_to_object函数是干什么的add_item_to_object代码解析函数实现函数原理解析开头的代码constant_key参数的作用最后的if判断 add_item_to_array函数 总结 前言 在我们的日常编程中,JSON已经成为了一种非常常见的数据交换格式。在C语言中&#…

UI Toolkit系统学习

UI Toolkit 此文章用于学习UnityUI系统,手头的项目做完会来完善 官方文档 Unity上方菜单栏点击Window->UI Toolkit->Samples可以看UI Toolkit中的很多样例 使用 UI Toolkit 和 UI Builder 制作物品编辑器 在文件夹中右键->Create->UI Toolkit->Edi…

leetCode-hot100-动态规划专题

动态规划 动态规划定义动态规划的核心思想动态规划的基本特征动态规划的基本思路例题322.零钱兑换53.最大子数组和72.编辑距离139.单词拆分62.不同路径63.不同路径Ⅱ64.最小路径和70.爬楼梯121.买卖股票的最佳时机152.乘积最大子数组 动态规划定义 动态规划(Dynami…

【训练篇】MLU370-M8 完成 qwen1.5-7b-chat-lora训练及推理

文章目录 前言一、平台环境配置二、环境 or 模型准备1.模型下载2.环境准备2.1 modelscope2.2 transformers2.3 accelerate2.4 deepspeed2.5 peft2.6 环境代码修改 3训练代码准备4 代码修改 三,训练后推理验证四.推理效果展示1.微调前2.微调后 前言 本期我们采用魔塔…

distance delayed sound

distance delayed sound 在本章中,我们将讨论在游戏音频中使用距离延迟的重要性。我们将首先通过一个常见的例子——闪电和雷鸣,来展示这种重要性并解释距离延迟音频的基础知识。我们将讨论计算速度、距离和时间的数学和方程式,以确定距离延迟…

数据倾斜优化:Hive性能提升的核心

文章目录 1. 定义2. 数据倾斜2.1 Map2.2 Join2.3 Reduce 3. 写在最后 1. 定义 数据倾斜,也称为Data Skew,是在分布式计算环境中,由于数据分布不均匀导致某些任务处理的数据量远大于其他任务,从而形成性能瓶颈的现象。这种情况在H…

PotPlayer安装及高分辨率设置

第1步: 下载安装PotPlayer软件 PotPlayer链接:https://pan.baidu.com/s/1hW168dJrLBonUnpLI6F3qQ 提取码:z8xd 第2步: 下载插件,选择系统对应的位数进行运行,该文件不能删除,删除后将失效。 …

【强化学习的数学原理】课程笔记--2(贝尔曼最优公式,值迭代与策略迭代)

目录 贝尔曼最优公式最优 Policy求解贝尔曼最优公式求解最大 State Value v ∗ v^* v∗根据 v ∗ v^* v∗ 求解贪婪形式的最佳 Policy π ∗ \pi^* π∗一些证明过程 一些影响 π ∗ \pi^* π∗ 的因素如何让 π ∗ \pi^* π∗ 不 “绕弯路” γ \gamma γ 的影响reward 的…

2024/6/30周报

文章目录 摘要ABSTRACT文献阅读题目问题本文贡献方法LSTMTCN模型总体架构 实验实验结果 深度学习TCN-LSTM代码运行结果 总结 摘要 本周阅读了一篇关于TCN和LSTM进行光伏功率预测的文章,本文提出了一种利用LSTM-TCN预测光伏功率的新模型。它由长短期记忆和时间卷积网…

ThreadPoolExecutor基于ctl变量的声明周期管理

个人博客 ThreadPoolExecutor基于ctl变量的声明周期管理 | iwts’s blog 总集 想要完整了解下ThreadPoolExecutor?可以参考: 基于源码详解ThreadPoolExecutor实现原理 | iwts’s blog ctl字段的应用 线程池内部使用一个变量ctl维护两个值&#xff…