---
# System prepended metadata

title: ' Password, Session, Cookie, Token, JWT, SSO, OAuth '
tags: [觀念重點區]

---

#  Password, Session, Cookie, Token, JWT, SSO, OAuth

https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

https://ithelp.ithome.com.tw/articles/10224787
https://kennychen-blog.herokuapp.com/2019/12/14/JWT-JSON-Web-Tokens-%E5%8E%9F%E7%90%86%E4%BB%8B%E7%B4%B9/


https://blog.bytebytego.com/p/password-session-cookie-token-jwt-ec1

https://www.youtube.com/watch?v=P2CPd9ynFLg&ab_channel=ByteByteGo

![image](https://hackmd.io/_uploads/SJYMKnwwa.png)


## jwt詳細說為什麼要refresh(續簽)
https://www.bilibili.com/video/BV1ov411N7iw/?spm_id_from=333.788&vd_source=f726dd30598fe01d9fbc9c5a988d6408

![image](https://hackmd.io/_uploads/HysMPIlq0.png)



## 一文彻底搞懂SSO 和 OAuth2.0 关系
https://juejin.cn/post/7234322338824650809
##
![image](https://hackmd.io/_uploads/SJP-kmOva.png)
![image](https://hackmd.io/_uploads/HJGf1mdD6.png)

![image](https://hackmd.io/_uploads/ByqleXuvp.png)
![image](https://hackmd.io/_uploads/SJl9e7uw6.png)

## jwt vs jwe

![image](https://hackmd.io/_uploads/HJ5iDfPKA.png)

![image](https://hackmd.io/_uploads/H1FtofPF0.png)
![image](https://hackmd.io/_uploads/SJXWnGwF0.png)



## SSO vs 會員微服務
https://zhuanlan.zhihu.com/p/38942172


https://hackmd.io/@yosame/cas-server

![image](https://hackmd.io/_uploads/SyC4WQODa.png)
![image](https://hackmd.io/_uploads/HyVB-mOw6.png)

![image](https://hackmd.io/_uploads/rkdxV4_Da.png)
![image](https://hackmd.io/_uploads/rJGZ44OvT.png)

## oAuth 2.0
![image](https://hackmd.io/_uploads/H1hVcf_wp.png)
![image](https://hackmd.io/_uploads/HkwQy7OPa.png)


## 簡單介紹
JWS 是定義如何做帶有簽章的 token，JWE 則是定義內容加密的 token，而 JWK 與 JWA 則是在金鑰的格式以及演算法，最後 JWT 則是定義了 header 內容與 claim 內容，以及 token 的相關規範

就概念上而言，JWS 與 JWE 都是屬於 JWT 的一種。雖然有 JWE 在定義加密，但實務上的應用大多以 JWS 為主


JWT 的安全性，最主要的原因是，演算法明確的夾帶在 token 裡面


## 加密

目前非對稱不使用RSA了都用橢圓25519

![image](https://hackmd.io/_uploads/ryZqcI8wa.png)
已有的 TLS 协议的密码套件中，推荐的组合里 RSA 都只是用于身份验证（也就是签名，即使私钥泄露也不影响保密性），实际的密钥交换都是通过 DHE 或椭圆曲线的 ECDHE


顺便一提，和教科书里所述同样不同的是，现实中使用的 RSA 加密会对数据使用 OAEP 方案进行填充。由于填充过程引入了随机数，因此用同样的密钥多次加密相同的明文的结果也是不一样的。

## 基本觀念
格式都是多組 Base64UrlEncode 過後的字串，用 . 串接而串的

剩下看文章

![](https://i.imgur.com/C34YbXp.png)
### header
![](https://i.imgur.com/WWJx4vd.png)
### Payload
![](https://i.imgur.com/ccvruIF.png)
![](https://i.imgur.com/gfFYjTd.png)
![](https://i.imgur.com/dMaRJgM.png)
個人覺得通常都會放 iat、exp 等標準欄位，因為通常會需要檢查 JWT 發送時間及是否過期，以及還有使用者帳號，為了方便查詢使用者的一些數據，通常以前的做法是 Session 裡面存放使用者帳號，現在改用 JWT 的 payload 上存放，以及角色身分的定義，可以用來看該使用者是否有權限取得後端 API 的內容。
###### tags: `觀念重點區`