登录的两种方式

news2025/6/13 20:21:09

Cookie

起源:「购物车」功能需求

工作机制

  • 1.服务器需要客户端保存的内容,放在set-cookie headers里返回,客户端会自动保存

  • 2.客户端保存的cookies,会在之后的所有请求里都携带进cookie header里发送给服务器

  • 3.客户端保存cookie是按照服务器域名来分类的,例如shop.com发回的cookie保存下来以后,在之后向games.com的请求中并不会携带。

  • 4.客户端保存的cookie在超时后会被删除、没有设置超时时间的cookie(称作session cookie)在浏览器关闭后就会自动删除;另外,服务器也可以主动删除还未过期的客户端cookies

cookie的作用

  • 会话管理:登录状态、购物车

  • 个性化:用户偏好、主题

  • Tracking:分析用户行为

XSS

跨站脚本攻击,即使用javascript拿到浏览器的cookie之后,发送到自己的网站,以这种方式来盗取用户cookie。

应对方式:server在发送cookie时,敏感的cookie加上HttpOnly。

CSRF/XSRF

跨站请求伪造。即在用户不知情的情况下访问已经保存了cookie的网站,以此来越权操作用户账户(例如盗取用户资金)。应对方式主要是从服务器安全角度考虑。

应对方式:Referer校验

cookie+session认证方式的缺点

1.增加请求体积,浪费性能,因为每次都会携带cookie
2. 增加服务端资源消耗,因为每个客户端连接进来都需要生成session,会占用服务端资源
3. 容易遭受CSRF攻击,即跨站请求伪造

cookie和session的区别

  1. session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
  2. cookie 只支持存储字符串数据,session 可以存储任意数据。
  3. cookie 的有效期可以设置较长时间,session 有效期都比较短。
  4. session 存储空间很大,cookie 有限制

cookie、sessionStorage、localStorage的区别

  1. 数据存储
    cookie的数据始终在http的同源请求中存储,数据可以在客户端与服务端进行回传,webStorage的数据只能进行本地存储,不能向服务器进行传递
  2. 生命周期
    sessionStorage是会话级别的缓存,当次会话结束后缓存数据被清除
    localStorage是永久缓存,直到被手动清除
    cookie可以设置生命周期,到该时间失效
  3. 存储的数据量
    每次http的请求都会携带cookie,所以cookie的大小要求不能超过4k,webStorage数据因为只存储在本地,对数据存储量可以达到4-5M
  4. 作用域
    sessionStorage作用在同一会话之间,不在不同浏览器窗口(标签页)共享、即使同源,cookie、localstorage在所有同源窗口之间共享
  5. 应用场景
    localStoragese:适合长期保存在本地的数据。sessionStorage:敏感账号一次性登录;cookie+session 是实现认证的一种非常好的方式

Authorization

Basic

格式:Authorization:Basicusername:password(Base64ed)

http有风险,https无事

Bearer

格式:Authorization:Bearer

bearer token获取方式

通过OAuth2授权流程

  1. 第三方网站向授权方网站申请第三方授权合作,拿到client id和client secret

  2. 用户在使用第三方网站时,点击「通过XX(如GitHub)授权」按钮,第三方网站将跳转到授权方网站,并传入client id作为自己的身份标识

  3. 授权方网站根据client ID,将第三方网站的信息和第三方需要的用户权限展示给用户,并询问是否同意授权

  4. 用户点击「同意授权」按钮后,授权方网站将页面跳转回第三方网站,并传入Authorization code作为用户认证凭证。

  5. 第三方网站将Authorization code发回自己的服务器

  6. 服务器将Authorization code和自己的client secret(严格保密)一并发送给授权方的服务器(https),授权方服务器通过验证后,返回access token。OAuth流程结束

  7. 上面的过程结束后,第三方网站服务器(或者客户端也会,客户端使用不安全,会泄漏token,这样做Authorization code的环节失去了作用 )就可以使用access token作为用户授权令牌,向授权网站发送请求来获取用户信息或操作用户账户。但这已经在OAuth流程之外。

为什么OAuth要引入Authorization code,并需要申请授权的第三方将Authorization code发送回自己的服务器,再从服务器来获取access token,而不是直接返回access token?

为了安全。OAuth不强制授权流程必需使用https,因此需要保证当通信路径中存在窃听者时,依然具有足够高的安全性。

在自家App中使用Bearer token

有的APP在API设计中,将登录和授权设计成类似OAuth2的过程,但简化掉Authorization code的概念。
即:登录接口请求成功时,返回access token来当做bearer token进行用户操作了

第三方登录案例

第三方App通过微信登录的流程,也是一个OAuth2流程

  1. 第三方App向腾讯申请第三方授权合作,拿到client id 和client secret

  2. 用户在使用第三方App时点击「通过微信登录」,第三方App将使用微信SDK跳转到微信,并传入自己的client ID作为字节的身份识别

  3. 微信通过和服务器交互,拿到第三方App信息,并显示在界面中,然后询问用户是否同意授权该App使用微信来登录

  4. 用户点击「使用微信登录后」,微信和服务器交互将授权信息提交,然后跳回第三方APP,并传入Authorization code作为用户认可凭证。

  5. 第三方APP调用自己服务器的「微信登录」api,并传入Authorization code,然后等待服务器响应。

  6. 服务器在收到登录请求后,拿收到的Authorization code去向微信的第三方授权接口发送请求,将Authorization code和自己的client secret一起作为参数发送,微信验证通过后,返回access token

  7. 服务器在收到access token后,立即拿着access token去向微信用户信息接口发送请求,微信验证信息通过后返回用户信息

  8. 服务器在收到用户信息后,在自己的数据库中为用户创建一个账户,并使用从微信服务器拿来的用户信息填入自己的数据库,以及将用户的ID和用户的微信ID做关联

  9. 用户创建完成后,服务器向客户端的请求发送响应,传送回刚创建好的用户信息

  10. 客户端收到服务器响应,用户登录成功

cookie、session、token

###

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

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

相关文章

服务(第二十一篇)mysql高级查询语句(二)

①视图表: 视图表是虚拟表,用来存储SQL语句的定义 如果视图表和原表的字段相同,是可以进行数据修改的; 如果两者的字段不通,不可以修改数据。 语法: 创建:create view 试图表名 as ... 查…

一分钟图情论文:《大学生数字囤积行为的探索性研究——基于个人信息管理视角》

一分钟图情论文:《大学生数字囤积行为的探索性研究——基于个人信息管理视角》 “仓鼠症”是指一些仓鼠为了过冬而囤积大量食物,但由于储藏过多、遗忘储藏地点或者无力储藏,最终使劳动成果白白浪费。在数字时代,我们很多人也成为…

LSTM-理解 Part-1(RNN:循环神经网络)

在之前博主写过涉及到LSTM的博客见下: 机器学习 Pytorch实现案例 LSTM案例(航班人数预测) 该项目原始的博客版本是: Time Series Prediction using LSTM with PyTorch in Python 循环神经网络RNN:Recurrent Neural Ne…

B树的插入操作

我的错误插入操作的详细解析 前言一、实现思路二、思路梳理1.我需要解决的问题2.具体函数实现 总结 前言 本文主要记载了我在实现递归插入操作的思路历程,以及遇到的问题和梳理操作的过程。我之前的实现方法有一种很大的问题,因为不是尾递归实现&#x…

智能高效的Go IDE——GoLand v2023.1全新发布,引入gRPC 导航

GoLand 使 Go 代码的阅读、编写和更改变得非常容易。即时错误检测和修复建议,通过一步撤消快速安全重构,智能代码完成,死代码检测和文档提示帮助所有 Go 开发人员,从新手到经验丰富的专业人士,创建快速、高效、和可靠的…

多语言APP的外包开发流程及注意事项

近些年国内越来越多的公司走向海外,有些互联网项目即可以为国内用户使用,也可以为国外用户使用,尤其是一些智力类小游戏,这些小游戏不需要特别的运营,只要在设计和玩法上把握好,那就可以推广到全球用户。今…

MySQL 中 CONCAT 函数使用

1:创建数据表: CREATE TABLE user ( id int NOT NULL AUTO_INCREMENT, code varchar(255) NOT NULL, name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT3 DE…

KubeSphere 社区双周报 | 开源之夏已启动 | 2023.04.28-05.11

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.04.28-2023.…

数据结构学习分享之堆的详解以及TopK问题

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 数据结构第七课 1. 前言&a…

未来已来,时代颠覆者ChatGPT你真的了解吗?

文章目录 什么是ChatGPTchatgpt与自然语言处理从gpt1.0到chatgpt,经历了什么chatgpt是一个语言模型chatgpt是如何处理文字输入的写在最后 什么是ChatGPT ChatGPT是美国OpenAI研发的聊天机器人程序,2022年11月30日发布。ChatGPT是人工智能技术驱动的自然语…

网络基础知识(4)——建立与关闭连接

建立 TCP 连接:三次握手 前面我们提到过,TCP 协议是一个面向连接的协议,双方在进行网络通信之间,都必须先在双方之间建立一条连接,俗称“握手”,可能在学习网络编程之前,大家或多或少都听过“…

SpringSecurity安全权限框架及其原理

1. 基础使用 首先创建最基本的SpringBoot项目&#xff0c;默认都会。主要是引入依赖和创建Controller进行测试。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://w…

十五天MySQL学习计划(运维篇-完结)读写分离-第十五天

十五天MySQL学习计划&#xff08;运维篇-完结&#xff09;读写分离-第十五天 读写分离 1.读写分离 ​ 读写分离&#xff0c;简单的说是把对数据库的读和写操作分开&#xff0c;以对应不同的数据库服务器。主服务器提供写操作&#xff0c;从数据库提供读操作&#xff0c;这样…

linux0.12-8-10-sys.c

[369页] 1、 这个文件需要配合其他文件一起看才能明白函数的作用&#xff1b; 2、 进程ID和进程组ID是描述进程之间的关系&#xff0c;与用户ID和组ID等其他无关系&#xff1b; 3、 用户ID和组ID和文件&#xff08;程序&#xff09;属性有关&#xff0c;当进程执行&#xff08;…

首发!车联网前装搭载率破70%,本土供应商抢下半壁江山

对于汽车智能化来说&#xff0c;网联化是相辅相成的角色&#xff0c;从传统3G、4G到5G的进化&#xff0c;提升座舱信息娱乐的体验&#xff1b;到C-V2X落地为辅助驾驶及自动驾驶提供冗余感知。 同时&#xff0c;车联网的普及&#xff0c;也进一步驱动互联网生态内容、服务以及类…

【AUTOSAR】【以太网】SoAd

目录 一、概述 二、限制与约束 三、依赖模块 5.1 TCPIP模块 5.2 通用上层 四、功能描述 4.1 套接字连接 4.2 PDU传输 4.3 PDU Header option 4.4 PDU 接收 4.5 最佳匹配算法 4.6 消息接受策略 4.7 TP PDU取消 4.8 路由组 4.9 PDU fan-out 五、API接口 5.1 API…

SpringBoot实现登录拦截的实现

对于管理系统或其他需要用户登录的系统&#xff0c;登录验证都是必不可少的环节&#xff0c;在SpringBoot开发的项目中&#xff0c;通过实现拦截器来实现用户登录拦截并验证。 1、SpringBoot实现登录拦截的原理 SpringBoot通过实现HandlerInterceptor接口实现拦截器&#xff…

如何完成GNSS接收器的定时校准

背景 GNSS以其提供亚米级精度定位的能力而闻名。然而鲜为人知的是&#xff0c;GNSS还提供了一种非常便捷的方法&#xff0c;可以通过GNSS接收器获得纳秒&#xff08;甚至亚纳秒&#xff09;的定时精度。事实上&#xff0c;除了三个空间维度之外&#xff0c;GNSS还使用户能够计…

iPhone照片导入电脑的图文教程,批量上传的3个方法!

案例&#xff1a;苹果手机照片怎么批量上传到电脑&#xff1f; 【友友们&#xff0c;手机照片太多&#xff0c;占用了我很多内存。想要把照片上传批量上传到电脑上进行保存&#xff0c;该怎么做&#xff1f;】 随着iPhone的普及和摄影功能的提升&#xff0c;越来越多的用户希望…

Rave Reports v2022 for Delphi 7-11

Rave Reports v2022 for Delphi 7-11 Rave Reports是来自Nevrona的一组公司&#xff0c;从Delphi和CBuilder中的数据库中报告进度。您可以使用专用工具轻松设计自己的报告。如果您需要将报告更改为您的用户&#xff0c;例如要发布的订单报告&#xff0c;此工具也提供了此功能&a…