# 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: `觀念重點區`