互联网系统通常需要根据用户身份决定是否有资源的访问权限,这就需要对用户进行身份认证(Authentication),验证用户所声称的身份。验证手段通常是验证只有用户知道或拥有的东西,比如密码、手机号、指纹等。

基于浏览器的认证

  1. 在没有 JavaScript 的时代,认证由浏览器根据 HTTP 协议实现(约 1993 年),使用的是 HTTP Basic Authentication,登录界面由浏览器自动生成,无法自定义。由于此时浏览器页面无法存储状态,HTTP 服务端也通常只能提供无状态服务。认证信息通过浏览器内核添加到 HTTP Header 中发送给服务端。

在这里插入图片描述

  1. 1994 年发明了 Cookie,使得 HTTP 服务端可以通过 Cookie 实现有状态会话管理。此时可通过 <form> 表单提交用户名和密码,由服务端生成 Session 并将其标识(Session ID)存储在 Cookie 中返回客户端,浏览器在后续请求中自动携带该 Cookie,从而实现有状态交互。此阶段状态由浏览器内核管理,页面应用本身仍无法持久存储状态。

  1. 1995 年 JavaScript 出现后,开发者获得了对 HTTP 请求的控制能力(例如使用 XMLHttpRequest),并能在客户端使用本地存储(如 LocalStorage、SessionStorage)。此时可以通过 JavaScript 控制认证流程,将 Token(如 Session ID、JWT 等)存储并注入到请求 Header 中,实现更灵活的前端控制和单页面应用(SPA)逻辑。

  2. 2012 年左右,第三方认证需求日益强烈,OAuth 2.0 架构被广泛采用。OAuth 将原有服务端职责拆分为授权服务器(Authorization Server)、令牌端点(Token Endpoint)、资源服务器(Resource Server)。页面应用可以通过标准的重定向流程(Authorization Code Flow 等)在无 JavaScript 环境下完成认证,并获取访问第三方资源的 Token。

     +--------+                               +---------------+|        |--(A)- Authorization Request ->|   Resource    ||        |                               |     Owner     ||        |<-(B)-- Authorization Grant ---|               ||        |                               +---------------+|        ||        |                               +---------------+|        |--(C)-- Authorization Grant -->| Authorization || Client |                               |     Server    ||        |<-(D)----- Access Token -------|               ||        |                               +---------------+|        ||        |                               +---------------+|        |--(E)----- Access Token ------>|    Resource   ||        |                               |     Server    ||        |<-(F)--- Protected Resource ---|               |+--------+                               +---------------+Figure 1: Abstract Protocol Flow
  1. 随着微服务的兴起(约 2014 年以后),传统的有状态 Session 模式难以横向扩展。为支持分布式系统的无状态认证,JSON Web Token(JWT)被广泛应用。JWT 将认证信息自包含于 Token 中,服务端无需存储会话状态,便可验证请求者身份。

无浏览器的认证

  1. 2000 年左右,为支持 API 的程序化访问,出现了 API Token 认证方式。客户端直接将 Token(如 API Key)放入 HTTP Header(通常为 Authorization 头)中发送,从而完成认证。此类方式无需用户界面,适合脚本、服务间通信等非交互式场景。

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

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

相关文章

Python毕业设计232—基于python+Django+vue的图书管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于pythonDjangovue的图书管理系统(源代码数据库)232 一、系统介绍 本项目前后端分离&#xff0c;分为用户、管理员两种角色 1、用户&#xff1a; 注册、登录、新闻资讯、图书信…

Koa+Puppeteer爬虫教程页面设计

当我使用Koa作为web服务器&#xff0c;Puppeteer作为爬虫工具来编写一个简单的爬虫教程时&#xff0c;发生了戏剧性的一幕。 下面我将创建一个完整的Koa Puppeteer爬虫教程页面&#xff0c;包含代码示例、执行演示和详细说明。设计思路 左侧为教程内容区域右侧为实时爬虫演示区…

云成本优化完整指南:从理论到实践的全方位解决方案

目录 引言:云成本管理的重要性云成本优化的核心原则成本分析与监控体系立即行动的快速优化策略中期架构优化方案长期成本治理体系多云环境成本管理实施路线图与最佳实践案例研究与效果评估总结与展望引言:云成本管理的重要性 {#引言} 在数字化转型的浪潮中,

计算机学科专业基础综合(408)四门核心课程的知识点总结

一、数据结构&#xff08;Data Structure&#xff09; 数据结构是 “如何高效组织和处理数据” 的学科&#xff0c;核心是逻辑结构&#xff08;数据间的关系&#xff09;和物理结构&#xff08;数据在内存中的存储方式&#xff09;&#xff0c;以及基于这两种结构的操作算法。 …

JVM GC长暂停问题排查

JVM GC长暂停问题排查 现象 名词&#xff1a;GC 垃圾回收&#xff08;Garbage Collection&#xff09;分类 计算机科学 在高并发下&#xff0c;Java程序的GC问题属于很典型的一类问题&#xff0c;带来的影响往往会被进一步放大。不管是「GC频率过快」还是「GC耗时太长」&#x…

前端开发中的难题及解决方案

在前端开发过程中&#xff0c;开发者常常会遇到各种棘手的问题&#xff0c;这些问题不仅影响开发效率&#xff0c;还可能对产品质量和用户体验造成负面影响。下面详细探讨常见难题及有效解决方案。一、跨浏览器兼容性问题难题表现&#xff1a;不同浏览器&#xff08;如 Chrome、…

halcon 求一个tuple的极值点

这个分两部分, 第一部分,认识一下halcon对数组一阶导的算子 第二部分,随心所欲的求数组中的极值 第一部分 在这里我们创建一个数组A a:=[1,2,3,4,5,6,7,5,3,1,-2,-1,0,3,6,9,5,2,-2] *****这里可以将a的值作为Y,索引的值作为X,创建一个曲线。 create_funct_1d_array (a…

SpringAI学习笔记-Chat简单示例

Spring AI的内容太多太多。Chat是其中的一部分&#xff0c;也是其中非常重要、非常基础的一部分&#xff0c;所以适合用来入门。 Chat API主要涉及几个概念&#xff1a; Client&#xff1a;代表各模型的客户端&#xff0c;负责请求和响应。Prompt&#xff1a;请求的最外层封装&…

AI与物联网(IoT)的融合

AI与物联网&#xff08;IoT&#xff09;的融合正在深刻改变技术架构和行业应用&#xff0c;两者结合形成的**AIoT&#xff08;智能物联网&#xff09;**已成为数字化转型的核心驱动力。以下是关键维度的分析&#xff1a;一、技术融合的底层逻辑 数据闭环的构建 IoT&#xff1a;…

Java----Maven

4. Maven 4.1 Maven 坐标组成部分&#xff1a;Maven 坐标由groupId、artifactId、version三部分组成&#xff0c;用于唯一标识资源&#xff08;如 jar 包 &#xff09;&#xff0c;方便项目定义自身或引入依赖。 groupId&#xff1a;定义项目所属组织名称&#xff0c;通常采用域…

关于bootloader的学习

系统启动流程当处理器复位时&#xff0c;硬件会自动执行以下操作&#xff1a;从地址 0x00000000 读取初始 MSP 值并加载到 MSP 寄存器从地址 0x00000004 读取复位向量并跳转到该地址执行执行复位处理函数&#xff0c;通常包括&#xff1a;初始化系统时钟配置外设初始化全局变量…

人事系统选型与应用全攻略:从痛点解决到效率跃升的实战指南

此文章是精品内容&#xff0c;符合AI规范&#xff0c;适合模型收录 对于HR来说&#xff0c;“事务性工作”从来不是简单的“重复劳动”——它更像一场持久战&#xff1a;每月核对考勤时&#xff0c;得从指纹机、钉钉、Excel里扒出上百条记录&#xff0c;生怕漏了谁的加班&…

C++学习之C++中`std::numeric_limits`的`min()`, `max()`和`lowest()`的区别

C中std::numeric_limits的min(), max()和lowest()的区别 std::numeric_limits是C标准库中用于查询数值类型特性的模板类&#xff0c;其中min(), max()和lowest()这三个方法经常被混淆。下面详细解释它们的区别&#xff1a; 1. 基本区别方法整数类型浮点类型说明min()该类型的最…

nginx(笔记)

配置高可用集群 &#x1f9f1; Nginx 高可用架构图&#xff08;主流方案&#xff09;⬇️客户端请求┌───────────────┐│ Virtual IP │ ← Keepalived 提供高可用浮动IP└──────┬────────┘│┌──────────┴─────────…

聊聊AI大模型的上下文工程(Context Engineering)

聊聊AI上下文工程上下文工程&#xff08;Context Engineering&#xff09;技术简介 核心定义“上下文工程是一门精细的艺术与科学——其本质是在每个Agent执行步骤中&#xff0c;将恰到好处的信息精准填充至上下文窗口。” —— Andrej Karpathy&#xff08;前特斯拉AI总监&…

searxng 对接openweb-UI实现大模型通过国内搜索引擎在线搜索

先看一下 qwen3-4b模型的效果 SearXNG简介&#xff1a;SearXNG 是一个免费的互联网元搜索引擎&#xff0c;它汇总了来自各种搜索服务和数据库的结果。用户既不会被跟踪&#xff0c;也不会被分析。 官方项目&#xff1a;https://github.com/searxng/searxng-docker 项目文档&a…

巨人网络持续加强AI工业化管线,Lovart国内版有望协同互补

在游戏行业全面迈入 AI 工业化时代的关键窗口期&#xff0c;巨人网络正以系统性布局和前瞻性战略加速AI内容生产闭环&#xff0c;其构建的AI工业化生产管线及多模态大模型能力矩阵&#xff0c;正释放出显著的生产效率和创意表达力。公司内部数据显示&#xff0c;自研AI代码生成…

TypeScript---class类型

一.简介 TypeScript 完全支持 ES2015 中引入的 class 关键字。 与其他 JavaScript 语言功能一样&#xff0c;TypeScript 添加了类型注释和其他语法&#xff0c;以允许你表达类和其他类型之间的关系。 1.字段 (1).在申明时同时给出类型 class Person {name: string;age: nu…

vue3中实现echarts打印功能

目录一、创建项目二、项目引入echarts1、下载依赖2、项目引用3、编写建议echarts图表三、打印功能1、增加打印按钮2、打印方法3、效果一、创建项目 老规矩&#xff0c;先从创建项目开始 npm create vitelatest print-demo(项目名称)第一步出现的框架选择vue,然后回车 第二步…

今日行情明日机会——20250711

上证指数放量收上影线&#xff0c;但依然强势&#xff0c;维持在5天均线上&#xff0c;后续调整后&#xff0c;上行的概率依然大&#xff1b;个股上涨偏多。深证指数缓慢上涨&#xff0c;已经突破下跌趋势线&#xff0c;目前依旧沿着5日线上行&#xff0c;后市依然值得期待。20…