Перейти к содержимому

現代系統身份認證AuthN-誰啊及AuthZ-能幹啥。SSO單一簽入:SAML、CAS與OIDC三種身份協定。雙Token機制:Access Token與Refresh Token如何兼顧安全與體驗。

Wayne Tsai

0:00 / 0:00

現代系統身份認證AuthN-誰啊及AuthZ-能幹啥。SSO單一簽入:SAML、CAS與OIDC三種身份協定。雙Token機制:Access Token與Refresh Token如何兼顧安全與體驗。

60 просмотров · 11 дней назад
Wayne Tsai
613 подписчиков
60 просмотров · 11 дней назад
現代軟體架構的身份認證與授權,是資訊技術領域中極為關鍵的基礎概念。在分散式系統與微服務體系裡,身份安全構成系統的防線。從核心定義、傳統演進、現代無狀態令牌機制,一路探討到企業級單一簽入與授權框架的安全防禦。 影片/目錄/章節 00:00 現代系統:無縫登入的身分認證 01:13 驗證與授權差異:401與403錯誤 03:01 傳統認證:基本驗證與API金鑰 04:21 傳統Session擴展瓶頸與延遲 05:40 無狀態認證:解析JWT令牌結構 07:07 JWT防偽機制:簽章防資料竄改 08:52 雙令牌機制:存取與重新整理令牌 10:26 安全儲存:防禦XSS跨站腳本攻擊 11:15 單一簽入架構:IdP與SP身分分工 12:50 SSO協定演進:CAS與SAML侷限 14:50 最新標準:OIDC協定與JWT整合 16:37 資安挑戰:零信任架構與設備驗證 第一部分,釐清身份驗證與授權的核心差異。 在軟體工程中,身份驗證,英文為Authentication,簡稱AuthN,主要解決「你是誰」的問題。也就是系統透過帳號密碼或生物特徵,確認請求者的真實身份。而授權,英文為Authorization,簡稱AuthZ,則是在確認身份後,解決「你能做什麼」的問題,判定該身份在系統中的權限。 對應到HTTP通訊協定的狀態碼,HTTP 401雖然字面規範為Unauthorized,但其精準通訊語意是未驗證,也就是Unauthenticated,代表系統無法確認請求者身份,通常是憑證缺失或錯誤。相對地,HTTP 403 Forbidden則代表身份已確認,但權限不足以存取該資源。早期HTTP協定將代表未驗證的狀態碼命名為401 Unauthorized,是歷史制定時將身份識別與權限混淆所致,在現代架構中必須嚴格區分。 第二部分,傳統Web驗證模式的運作與技術局限。 過去系統多採用以下四種模式。第一是基本身份驗證,Basic Authentication,客戶端將帳號密碼進行Base64編碼後放入HTTP請求標頭。這僅是字元轉碼而非加密,極易被反向解碼,除非完全覆蓋於HTTPS下,否則極不安全。第二是摘要身份驗證,Digest Authentication,利用MD5哈希演算法處理憑證,雖避免明文暴露,但MD5已被證實存在碰撞缺陷,現已遭淘汰。第三是API金鑰驗證,API Key Authentication,伺服器配發隨機字串金鑰,缺點是金鑰本身無資訊內涵,每次請求皆須依賴資料庫查表,且缺乏內建過期機制。第四是基於Session的身份驗證,Session-based Authentication,這是有狀態的驗證模式。伺服器在後端建立Session紀錄並將ID透過Cookie傳給客戶端。然而,伺服器必須記憶所有狀態,在面對分散式系統與大規模API時,會形成效能與擴充性的瓶頸。 第三部分,令牌驅動的世界,探討JWT與Bearer Authentication。 為突破擴充瓶頸,現代軟體架構全面轉向無狀態的令牌驅動架構。Bearer Authentication是一種HTTP授權標頭的格式,Bearer語意為持有者,代表持有令牌者即具權限。而JSON Web Token,簡稱JWT,則是目前最常採用的令牌載體。 JWT具備自包含與無狀態特性,由三個Base64Url編碼部分組成,中間以英文句點分隔。這三個部分包含,標頭Header、負載Payload、簽章Signature。標頭聲明令牌類型與數位簽章演算法;負載包含使用者聲明與權限;簽章則結合伺服器私鑰加密,防範竄改。這裡必須特別警告,負載部分僅作編碼而非加密,任何人皆可解碼閱讀,因此絕對不能存放敏感性資料。 JWT在微服務架構中,能透過在地驗證與JWKS金鑰輪替機制達到極致效能,無須資料庫查表即可驗證。然而,為防範JWT發出後難以撤銷的風險,現代架構多採用雙令牌機制。一是生命週期極短的存取令牌Access Token,用於API請求;二是生命週期較長的重新整理令牌Refresh Token,用於換取新的存取令牌。在前端防護上,嚴禁將令牌存於瀏覽器的LocalStorage中以防範XSS跨站腳本攻擊,重新整理令牌必須存放在具備HttpOnly與Secure標記的Cookie中。 第四部分,企業級單一簽入與身份協定。 單一簽入,Single Sign-On,簡稱SSO,允許使用者驗證一次即可存取多個獨立系統,大幅提升體驗並便於集中管理。SSO體系包含兩大角色,身份提供者Identity Provider,簡稱IdP,負責集中管理憑證與驗證;服務提供者Service Provider,簡稱SP,負責提供業務功能,並將驗證委外給IdP。 常見的聯邦身份協定包含三種。SAML 2.0是基於XML的標準,多用於傳統企業與政府,但結構龐大解析複雜。CAS採用票據機制,包含票據授權票據TGT與服務票據ST,多見於高等教育機構。OpenID Connect,簡稱OIDC,則是建立在OAuth 2.0之上的現代JSON身份層,原生支援RESTful API與行動端,是現代雲端應用的首選。 第五部分,現代授權框架的安全性分析與防禦。 即使採用OAuth 2.0或OIDC,若實作忽視邊界條件仍會產生漏洞。形式化驗證要求系統必須確保授權性、身份驗證性與會話完整性。 實務上常見四大漏洞。第一是307重導向攻擊,IdP錯用HTTP 307狀態碼,導致瀏覽器將包含明文密碼的POST請求轉發給惡意RP。修復方式是強制IdP使用HTTP 303 See Other狀態碼,促使瀏覽器轉為GET請求並丟棄POST內容。 第二是IdP混淆攻擊,攻擊者竄改請求,誘騙RP將驗證碼發至攻擊者的IdP。防禦策略是實施發行者識別符綁定與顯式意圖追蹤,要求RP在Session中記錄初始選擇的IdP並進行嚴格比對。 第三是State參數洩漏攻擊,授權碼與State參數透過HTTP Referer標頭洩漏給第三方,引發會話置換攻擊。解法是將State參數設為單次使用,並於全站部署嚴格的Referrer Policy。 第四是樸素RP會話完整性攻擊,RP未比對使用者初始意圖,導致受害者被強制登入為攻擊者帳號。修復方案是全面部署顯式使用者意圖追蹤,將不可預測的State隨機數與當前Session強綁定。 落實上述重導向規範、傳輸層加密、Cookie安全防護及JWT嚴格驗證等原則,才能建構出兼具效能與安全的身份防線。 #身份驗證 #Authentication #授權機制 #Authorization #無狀態令牌 #JWT #資訊安全 #CyberSecurity #單一簽入 #SSO #系統架構 #SoftwareArchitecture #雙令牌機制 #TokenRefresh #身分協定 #OpenIDConnect #漏洞防禦 #OAuth2 #前端防護 #WebSecurity