iT邦幫忙

2025 iThome 鐵人賽

DAY 1
1

前言

學習程式語言的過程中,我一直對於資訊安全有著極大的興趣,不論是關於帳密保存,或是Client端與Server端如何互動等等,我都想花時間仔細研究。畢竟如果在這過程中發生任何問題,不只是個人資料會外洩,錢財也可能會有巨大的損失,辛辛苦苦累積起來的名聲也會消失。

在網路上慢慢地蒐集這些資訊,讓我覺得學會資訊安全的關鍵,不只在於學會這些技術,重要的是融會貫通,系統系的理解整個資安的發展,以及現在的技術與實作。

而iT鐵人賽正是一個非常適合的挑戰,讓我把目前學會的關於資安的觀念都整合起來,變成系統化的內容分享給大家,也是驗證自己的整合成果。

在我蒐集與消化內容後,有另一個苦惱浮現在我的腦袋:我要怎麼才能讓內容更生動,讓一般人也能夠理解。

幸運的是,在滑PPT時,無意間看到這篇文章

https://www.ptt.cc/bbs/Militarylife/M.1472097807.A.689.html

裡面的內容是這樣說的:

執夜哨時,安官都要拿口令給哨長。
口令大部分的組成都是:人+事+地
例如:趙飛燕 吃香蕉 我房間

看到這篇後我靈光一閃,感覺資安的權限與授權就像站哨的衛兵,檢核著每個人是否可以通過,遇到長官、同僚、哨官等等不同權限的人又需要不同的方式處理,非常適合作為本次系列文的開場。

口令就像是密碼,經過檢核後就可以通過,長官、同僚、哨官等等人的身份在軍營中通常是由人自己去辨識,但是程式沒有辦法去看,所以會把個人身分夾帶在口令中,程式會根據密碼解析出來的身份,去知道這個人是誰,可以去做什麼事情。

而這就是授權跟認證的過程。從以前到現在的觀念都是如此,但是隨著發展,網路速度提升、硬體設備提高、AI出現,各種的新的登入設備、攻擊方式越來越多,為了因應這些變化,程式也衍生出許多不同的方法來處理。

所以這個系統除了教大家什麼是認證、授權之外,同時也會教大家認證與授權的演化,認證的部分,會從最簡單的帳密登入,一路到最新的OAuth / OIDC / SAML認證,授權的部分也會跟大家介紹RBAC / ABAC的概念,最終做一個簡單的 具備完整認證 + 授權的範例專案。

在寫這篇文章的同時,我也想來試試看Git 的Branch功能,所有的程式碼都放在這個Repo,但不同天數的程式碼會放在不同的Branch中,如下面的圖片所示,大家只要點main,或者是點旁邊的Branches就可以根據自己需要天數調整。

https://github.com/AnsathSean/spring-security-30days.git

https://ithelp.ithome.com.tw/upload/images/20250910/2015286413WURIyolH.png

我的教學分成五個階段,第一個階段是讓大家了解授權跟權限,以及最基本的Authentication實作。第二個階段開使深入教大家除了最基本的權限之外,開始有Session跟Token的概念。當大家有這些概念之後,第三階段會開始教大家實作Token常用的JWT的做法。當大家熟悉用JWT加密之後,第四階段就會開始帶大家了解到現今主流的授權方法,最後第五階段我們會整合這些方法,讓大家看看目前一個網站是如何進行授權跟權限的方法。

整個階段跟內容如下:

階段 1:基礎觀念與目標設定 (Day 1 ~ Day 5)

  • Day 1 系列介紹與學習目標

    說明這 30 天系列會帶讀者從 最簡單的帳密登入,一路學到 OAuth / OIDC / SAML / RBAC / ABAC。同時介紹為什麼選 Spring Security 作為教學框架,並設定最終目標:做出一個具備完整認證 + 授權的範例專案。

  • Day 2 Authentication vs Authorization

    解釋兩者的差異,舉例生活案例(刷卡 vs 進會議室),再連接到 Web 系統:使用者登入(Authentication)與 API 權限控制(Authorization)。

    • Authentication = 判斷你是誰(公司門口守衛)
      • Cookie = 拿到一張門票(但公司記得你)
      • Token = 每次來都出示新的憑證(你自己保存)
      • JWT = 一種結構化、驗證過的自帶資訊的憑證
      • OAuth = 幫你問 Google「這個人是誰」
  • Day 3 Basic Authentication (概念篇)

    說明最古老的驗證方式,帳號密碼透過 Base64 傳輸。講它的簡單、歷史地位,並指出安全性不足之處。

  • Day 4 Basic Authentication with Spring Boot 實作

    用 Spring Boot Security 設定 Basic Auth,實作一個簡單的 REST API,用 Postman 測試。最後強調為什麼現代專案不推薦使用。

  • Day 5 Cookie Based Authentication (Session 機制)

    介紹 Session 與 Cookie 的互動,伺服器如何保存登入狀態。說明 CSRF、Session 劫持等風險,並鋪墊後續「Token Authentication」的必要性。

階段 2:Session 與 Token 的演進 (Day 6 ~ Day 10)

  • Day 6 Cookie Based Authentication with Spring Boot 實作

    使用 Spring Security 預設 Session 機制,建立登入頁面與受保護的 API,並展示如何在瀏覽器 Cookie 中保存 Session ID。

  • Day 7 Token Authentication (概念篇)

    解釋為什麼需要 Token(Stateless、分散式架構方便)。比較 Session vs Token,舉例微服務架構下的好處。

  • Day 8 無狀態請求與自帶資訊的認證方式

    展示 沒有 Session 的 API 要怎麼運作:

  • Day 9 JWT 基礎 (結構篇)

    介紹 JWT 的組成:Header / Payload / Signature。用範例解析一個 JWT,並教大家怎麼用 base64 解碼。

  • Day 10 Java 手動實作 JWT

    不用框架,直接用 Java Base64 + HMAC-SHA256 實作最簡單的 JWT。讓讀者真正理解簽名是如何生成的。

階段 3:JWT 深入與實務應用 (Day 11 ~ Day 15)

  • Day 11 使用 jjwt 或 java-jwt 套件生成與驗證 JWT

    介紹常用 Java JWT 套件,演示如何快速生成 / 驗證 Token,並比較兩種常見套件的差異。

  • Day 12 JWT 整合 Spring Security

    在 Spring Security 中,建立登入 API → 生成 JWT → 請求攜帶 JWT → Filter 驗證。完成一個完整的 JWT 登入流程。

  • Day 13 JWT 過期與 Refresh Token 機制

    解釋 Access Token 應該要短期有效,並展示如何設計 Refresh Token 讓使用者能持續登入。

  • Day 14 JWT 黑名單與強制登出

    處理「如何讓 Token 提前失效」的問題。教如何設計黑名單(存在 Redis),以及強制登出邏輯。

  • Day 15 JWT 安全性考量

    整理 JWT 常見的安全陷阱:敏感資訊不能放 Payload、Token 洩漏風險、Clock Skew 問題。最後提供一些實務建議。

階段 4:OAuth 與 OIDC / SAML (Day 16 ~ Day 23)

  • Day 16 OAuth 2.0 基礎概念

    介紹 OAuth 的四個角色,為什麼第三方應用需要「代替使用者存取資源」。

  • Day 17 Spring Boot 實作 OAuth2 Client(以 GitHub 為例)

    讓應用程式可以「用 GitHub 登入」,展示 OAuth2 Client 在 Spring Security 的設定。

  • Day 18 OAuth 2.0 Authorization Code Flow

    用圖解完整拆解流程,說明 Authorization Code、Access Token、Redirect URL 的細節。

  • Day 19 OpenID Connect (OIDC) 概念

    解釋 OAuth 只解決授權問題,OIDC 補上身份驗證。講 ID Token 的結構與用途。

  • Day 20 OIDC with Spring Boot(Google 登入)

    使用 Spring Boot 整合 Google OIDC,示範「用 Google 帳號登入網站」。

  • Day 21 SAML 基礎

    說明 SAML 的歷史、XML 格式,特別適合企業單一登入(SSO)。

  • Day 22 SAML vs OIDC 比較

    比較協定的差異(JSON vs XML、Web 應用 vs 企業內部系統)。幫助讀者知道選擇哪一種。

  • Day 23 Spring Security 整合 SAML

    示範如何配置 Spring Security + SAML,模擬企業 SSO 登入流程。

階段 5:Authorization 深入與最佳實務 (Day 24 ~ Day 30)

  • Day 24:Spring Security Authorization 概念

    授權 vs 認證,GrantedAuthorityRoleScope 的概念。

  • Day 25:RBAC 快速介紹

  • Day 26:ABAC 與資源授權
    把「資源控制」和「屬性控制」結合:

  • Day 27:專案案例 Part 1 — 整合 JWT + OIDC

  • Day 28:專案案例 Part 2 — 加入授權邏輯 (RBAC + ABAC)

  • Day 29:專案案例 Part 3 — 進階授權策略與最佳實務

  • Day 30:總結與未來展望

    回顧整個系列,分享自己的收穫以及下一步。

本次的實作技術主要是用Java 的Spring boot Security的框架,會用這個的原因,一來是因為我會,二來是因為Security其實就已經把很多功能都已經做出來,我們只要去使用這些功能就好,這樣會大幅減少授權跟權限開發的過程。

我的IDE是使用Eclipse,如果想要了解Eclipse是如何安裝跟開發,可以參考我之前寫的系列文,當中就有一天就是在說明Eclipse的安裝與教學:

https://ithelp.ithome.com.tw/articles/10351172

那麼,第一天的挑戰賽就到這裡結束,開始我們的30天系列挑戰吧!

大家明天見~


下一篇
Day 2 Authentication vs Authorization
系列文
「站住 口令 誰」關於資安權限與授權的觀念教學,以Spring boot Security框架實作3
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言