---
# System prepended metadata

title: JWT
tags: [C#]

---

## Jwt是甚麼?
### 簡單說就是發一個邀請函，信函內會跟你說你的授權範圍與時限
:::info
* JSON Web Token（JWT）會產生一組密碼(HMAC)或是生成一對公鑰/私鑰(RSA、ECDSA)來將雙方之間的訊息透過JSON物件進行安全的傳遞。內部的組成包含: **header、payload、signature/encryption data**以Base64做編碼，並且以. 來做分開（例如： xxxxxx.yyyyyy.zzzzz ）。
:::

## Jwt運作原理

![Jwt](https://hackmd.io/_uploads/HJFpFWoRT.jpg)

1. Client端向Server請求認證
2. 認證通過後取得Token存在Client端，Server無狀態
3. 帶有Token認證的Clinet去呼叫Api Server做驗證
4. Api Server去驗證該請求的Token是否存在


## Jwt組成
![Jwt組成](https://hackmd.io/_uploads/H10zT-iA6.jpg)


## 業務場景
1. 註冊後的信箱認證(一次性)
2. Server端的無狀態(登入/登出)
3. 跨伺服器的資源請求(微服務)(驗證一次就能在不同Server取資源而不用再重新認證)
4. 無關安全議題的操作權限授與(好友邀請)
5. 保持登入(登入一次發送一個有期限的JWT)
6. IoT裝置的認證(裝置連網後自動發出一個認證請求，裝置擁有者只要確認沒問題，就讓伺服器回傳JWT)


## 注意事項
1. 駭客雖然可能竊取公鑰，最多只能驗證簽章，沒有權限去竄改，在使用上，我們必須確保 JWT 中不包含任何敏感資訊。


---
**參考資料:**
1. https://medium.com/mr-efacani-teatime/%E6%B7%BA%E8%AB%87jwt%E7%9A%84%E5%AE%89%E5%85%A8%E6%80%A7%E8%88%87%E9%81%A9%E7%94%A8%E6%83%85%E5%A2%83-301b5491b60e
2. https://ithelp.ithome.com.tw/m/articles/10333647
3. https://www.explainthis.io/zh-hant/swe/jwt
4. https://5xcampus.com/posts/what-is-jwt.html

