[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工作原理