[TOC]
## 认证授权
**认证(Authentication)**:验证你身份的凭据,通过这个凭据,系统得知你就是你,也就是说系统存在你这个用户。所以,Authentication被称为身份/用户验证(你是谁?)
**授权(Authorization)**:发生在Authentication(认证之后)。主要掌握我们访问系统的权限。比如有些特点的资源只能具有特定的权限的人才能访问比如admin(你有权限干什么)
### 什么是Cookie?Cookie的作用是什么?如何在服务端使用Cookie?
Cookies和Session都是用来跟踪浏览器用户身份的会话方式,但两者的应用场景不太一样。
Cookie:Cookies是某些网站为了辨别用户身份而存储在用户本地终端上的数据(通常经过加密)。简单来说:Cookies存放在客户端,一般用来保存用户信息。
### Cookie的一些应用案例
我们在Cookie中保存已经登录过的用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了。除此之外,Cookie还能保存用户首选项,主题和其他设置信息。
使用Cookie保存Session或者token。向后端发送请求的时候带上Cookie,这样后端就能取到Session或者token了。这样就能记录用户当前的状态。因为HTTP协议是无状态的。
**Cookie还可以用来记录和分析用户行为**。举个简单的例子你在网上购物的时候,因为HTTP协议是没有状态的。如果服务器想要获取你在某个页面停留状态或者看了那些商品,一种常用的方式就是将这些信息存放在Cookie
### Cookie和Session有什么区别?如何使用Session进行身份验证?
#### session
Session的主要作用就是通过服务端记录用户的状态。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。相对来说 Session 安全性更高。如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
### 如果没有cookie的话Session还能用吗?
一般是通过Cookie来保存SessionID,假如你使用了Cookie保存SessionID的方法的话,如果客户端禁用了Cookie,那么Session就无法正常工作
但是,我们可以将SessionID放在url里https://javaguide.cn/?session_id=xxx。, 这种方案的话可行。但是安全性和用户体验感降低。
### 为什么Cookie无法防止CSRF攻击,而token可以?
**CSRF**:一般翻译为跨站请求伪造。
例子:小壮登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了10000元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小壮的身份给银行发送了一个转账请求,也就是通过你的 Cookie 向银行发出请求。
进行Session认证的时候,我们一般使用Cookie来存储SessionId。登录成功之后会生成一个cookie存放在客户端。客户端每次访问的时候都会带上这个cookie来访问。
利用token的话。我们一般会将token存放在local storage中,然后我们在前端通过某些方式(get post)给每个请求加上token,这样就不会有csrf漏洞的问题。
>[danger] 需要注意的是XSS :无论Cookie还是token都是无法避免的。
> ————————————————
版权声明:本文为CSDN博主「知道的越多 那么不知道的就越多」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42061487/article/details/108118479
- 前言
- 第一部分 计算机网络与操作系统
- 大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?
- 性能占用
- 第二部分 Java基础
- 2-1 JVM
- JVM整体结构
- 方法区
- JVM的生命周期
- 堆对象结构
- 垃圾回收
- 调优案例
- 类加载机制
- 执行引擎
- 类文件结构
- 2-2 多线程
- 线程状态
- 锁与阻塞
- 悲观锁与乐观锁
- 阻塞队列
- ConcurrentHashMap
- 线程池
- 线程框架
- 彻底搞懂AQS
- 2-3 Spring框架基础
- Spring注解
- Spring IoC 和 AOP 的理解
- Spring工作原理
- 2-4 集合框架
- 死磕HashMap
- 第三部分 高级编程
- Socket与NIO
- 缓冲区
- Bybuffer
- BIO、NIO、AIO
- Netty的工作原理
- Netty高性能原因
- Rabbitmq
- mq消息可靠性是怎么保障的?
- 认证授权
- 第四部分 数据存储
- 第1章 mysql篇
- MySQL主从一致性
- Mysql的数据组织方式
- Mysql性能优化
- 数据库中的乐观锁与悲观锁
- 深度分页
- 从一条SQL语句看Mysql的工作流程
- 第2章 Redis
- Redis缓存
- redis key过期策略
- 数据持久化
- 基于Redis分布式锁的实现
- Redis高可用
- 第3章 Elasticsearch
- 全文查询为什么快
- battle with mysql
- 第五部分 数据结构与算法
- 常见算法题
- 基于数组实现的一个队列
- 第六部分 真实面试案例
- 初级开发面试材料
- 答案部分
- 现场编码
- 第七部分 面试官角度
- 第八部分 计算机基础
- 第九部分 微服务
- OpenFeign工作原理