《白帽子講 Web 安全》之身份認證

目錄

引言

一、概述

二、密碼安全性

三、認證方式

(一)HTTP 認證

(二)表單登錄

(三)客戶端證書

(四)一次性密碼(OTP)

(五)多因素認證

(六)FIDO

四、攻擊方式與單點登錄

(一)暴力破解和撞庫

(二)單點登錄

(三)Aereo CAS 安全注意事項

五、認證相關安全概述

六、OAuth 相關

刷新令牌機制

七、OIDC 相關

八、SAML 相關

九、CAS 相關

總結


引言

在 Web 應用的安全領域中,身份認證是至關重要的一環。吳翰清和葉敏所著的《白帽子講 Web 安全》一書中的身份認證章節,為我們深入剖析了這一關鍵領域。接下來,讓我們一同對這一章節的內容進行全面總結與知識分享。

一、概述

在 Web 應用的安全體系里,“認證” 和 “授權” 是兩個截然不同卻又緊密關聯的概念。

認證,其核心作用在于識別用戶究竟是誰,就好比在一個大型派對門口,保安通過查看邀請函或者證件來確認每一位來賓的身份。

授權,則是決定用戶能做什么,比如在派對中,有些區域只有 VIP 嘉賓才能進入,這就是授權在發揮作用。身份認證作為 Web 應用的基本安全功能,是保障用戶數據和應用功能安全的第一道防線。

常見的認證方式中,用戶名與密碼的組合是最為大眾所熟知的,無論是我們日常使用的社交賬號、電子郵箱,還是各種在線服務平臺,用戶名和密碼的輸入框總是如影隨形。

二、密碼安全性

密碼,作為最為常見的認證手段,擁有使用成本低的顯著優勢。幾乎所有互聯網用戶都能輕松理解并運用密碼來保護自己的賬戶。然而,它也存在一個致命的弱點,那就是極易被破解。在現實生活中,我們常常能聽到一些用戶因為設置了過于簡單的密碼,導致賬戶被盜用的新聞。為了提升密碼的安全性,在設計密碼策略時,諸多因素需要納入考量。

密碼長度是一個重要因素,一般來說,長度越長的密碼,其被破解的難度就越大。例如,一個 8 位純數字密碼,通過計算機暴力破解可能只需要幾分鐘甚至更短時間,而一個 16 位包含數字、字母、特殊字符的密碼,破解時間則可能會延長到數年甚至更久。

密碼復雜度同樣不容忽視。復雜的密碼應包含大小寫字母、數字以及特殊字符的組合。

以 “Abc@123456” 這樣的密碼為例,它既有大寫字母 “A”,小寫字母 “bc”,數字 “123456”,還有特殊字符 “@”,相較于單純的數字或字母密碼,安全性大大提高。同時,用戶應避免使用弱密碼,像 “123456”、“password”、“admin” 這類過于簡單且常見的密碼,幾乎是黑客破解賬戶的首選目標。

對于網站和應用開發者而言,存儲密碼時進行哈希處理并 “加鹽” 是至關重要的操作。

哈希處理是將密碼通過特定的哈希函數轉換為一串固定長度的哈希值進行存儲,這樣即使數據庫被泄露,黑客獲取到的也只是哈希值而非明文密碼。而 “加鹽” 則是在哈希處理前,向密碼中添加一段隨機字符串,增加密碼的復雜度。比如,用戶密碼為 “mypassword”,鹽值為 “randomsalt”,那么實際進行哈希處理的是 “mypasswordrandomsalt”,這使得黑客通過彩虹表等方式破解密碼的難度大幅增加。

import hashlib
import ospassword = "mypassword"
salt = os.urandom(16)   # 生成隨機鹽值
hashed_password = hashlib.pbkdf2_hmac('sha256',  password.encode('utf-8'),  salt, 100000)print(f"鹽值: {salt}")
print(f"哈希后的密碼: {hashed_password}")

三、認證方式

(一)HTTP 認證

  1. 基本認證:基本認證是 HTTP 協議中較為簡單的一種認證方式。當用戶訪問需要認證的資源時,服務器會返回一個 401 Unauthorized 響應,提示用戶輸入用戶名和密碼。用戶輸入的用戶名和密碼會以明文的形式,經過 Base64 編碼后在 HTTP 請求頭中發送給服務器。例如,用戶名 “user” 和密碼 “password” 經過 Base64 編碼后變為 “dXNlcjpwYXNzd29yZA==”,并在請求頭中以 “Authorization: Basic dXNlcjpwYXNzd29yZA==” 的形式發送。這種方式存在明顯的密碼泄露風險,因為 Base64 編碼很容易被解碼,一旦網絡被監聽,用戶名和密碼就會暴露無遺。
  2. 摘要認證:摘要認證在一定程度上彌補了基本認證的安全缺陷。它不再以明文形式傳輸密碼,而是通過計算密碼的哈希值來進行認證。在摘要認證過程中,服務器會發送一個包含隨機數(nonce)的挑戰信息給客戶端,客戶端使用用戶名、密碼、隨機數以及其他相關信息計算出一個摘要值,再將這個摘要值發送給服務器。服務器收到摘要值后,使用相同的算法和信息計算出一個預期的摘要值,若兩者一致,則認證成功。這種方式相較于基本認證,安全性更高,因為即使黑客截獲了網絡數據包,也無法輕易獲取用戶的密碼。

(二)表單登錄

表單登錄是我們在日常上網過程中最為常見的登錄方式。無論是購物網站、社交媒體平臺還是在線辦公系統,幾乎都采用表單登錄的形式。用戶在登錄頁面輸入用戶名和密碼,點擊登錄按鈕后,表單數據會被提交到服務器進行驗證。

然而,這種登錄方式面臨著釣魚攻擊的嚴峻威脅。釣魚攻擊通常通過仿冒正規網站的登錄頁面,誘使用戶輸入用戶名和密碼。

例如,黑客可能會創建一個與知名銀行網站極為相似的假網站,當用戶誤以為是真實銀行網站而輸入賬號密碼時,這些信息就會被黑客獲取。

在表單登錄過程中,前端加密密碼的實際意義并不大。因為前端代碼是運行在用戶瀏覽器中的,黑客可以通過各種手段,如查看網頁源代碼、使用瀏覽器插件等,輕松獲取前端加密的方式和密鑰,從而破解加密后的密碼。此外,應用在處理用戶登錄錯誤時,應模糊給出錯誤信息。

比如,當用戶輸入錯誤的用戶名或密碼時,統一提示 “用戶名或密碼錯誤”,而不是明確指出是用戶名錯誤還是密碼錯誤。這是因為如果明確指出錯誤類型,黑客可以通過不斷嘗試用戶名,根據錯誤提示來確定有效的用戶名,進而進行針對性的密碼破解攻擊

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>表單登錄示例</title>
</head>
<body><form action="login.php"  method="post"><label for="username">用戶名:</label><input type="text" id="username" name="username"><br><label for="password">密碼:</label><input type="password" id="password" name="password"><br><input type="submit" value="登錄"></form>
</body>
</html>

(三)客戶端證書

客戶端證書主要用于驗證服務器的可信性,在企業內部網絡環境中應用較為廣泛。

其工作原理是客戶端和服務器之間通過交換數字證書來驗證彼此的身份。數字證書由權威的證書頒發機構(CA)頒發,包含了證書持有者的公鑰、身份信息以及 CA 的數字簽名等內容。

例如,企業內部的員工在訪問公司的內部辦公系統時,員工的電腦上安裝有公司頒發的客戶端證書,當員工嘗試訪問系統時,服務器會要求客戶端提供證書進行驗證。只有當服務器驗證客戶端證書合法且與員工身份匹配時,才允許員工訪問系統

客戶端證書的安全性極高,因為證書的私鑰存儲在客戶端設備中,只有擁有該設備的用戶才能使用證書進行認證。而且,證書的頒發和管理由企業或權威機構嚴格把控,大大降低了被偽造的風險。然而,實施客戶端證書認證也存在一定的成本。企業需要投入資金建立證書頒發機構,為員工發放和管理證書,同時員工也需要在設備上安裝和維護證書,這在一定程度上增加了企業的管理成本和員工的使用成本。

(四)一次性密碼(OTP)

一次性密碼,也就是我們常說的動態口令,是一種基于密鑰和時間戳生成的臨時密碼。它的工作機制是一個典型的挑戰 / 應答過程。以常見的基于時間的一次性密碼(TOTP)為例,用戶在使用支持 OTP 的應用時,首先需要在手機上安裝相應的 OTP 生成器應用,并將其與需要認證的賬戶進行綁定。綁定過程中,服務器會為用戶生成一個唯一的密鑰,并將其存儲在服務器端和用戶的 OTP 生成器應用中。

當用戶需要登錄時,OTP 生成器應用會根據當前的時間戳以及之前綁定的密鑰,按照特定的算法生成一個一次性密碼。這個密碼在一定時間內(通常為 30 秒到 1 分鐘)有效。用戶將這個一次性密碼輸入到登錄頁面,服務器收到密碼后,使用相同的密鑰和當前時間戳,按照同樣的算法計算出一個預期的一次性密碼。若兩者一致,則認證成功。這種方式極大地提高了賬戶的安全性,因為即使黑客獲取了用戶的用戶名和密碼,由于一次性密碼的時效性,他們也無法利用這些信息成功登錄。

import pyotp# 生成一個新的密鑰
secret = pyotp.random_base32() 
totp = pyotp.TOTP(secret)# 獲取當前的一次性密碼
current_otp = totp.now() 
print(f"當前的一次性密碼: {current_otp}")

OTP動態口令實現?

// Google Authenticator算法核心
public class TOTP {public static String generateCode(String secret) {long time = System.currentTimeMillis() / 30000;byte[] key = Base32.decode(secret);byte[] data = ByteBuffer.allocate(8).putLong(time).array();// HMAC-SHA1運算...return truncate(hash).toString();}
}

(五)多因素認證

多因素認證,顧名思義,是通過多種不同類型的認證因素來確認用戶身份。

常見的認證因素包括用戶知道的信息(如密碼)、用戶擁有的物品(如手機、令牌)以及用戶本身的生物特征(如指紋、面部識別)。多因素認證的強度明顯高于單因素認證。

例如,在銀行的網上轉賬業務中,用戶不僅需要輸入密碼,還需要輸入手機收到的動態驗證碼,甚至可能需要進行指紋識別。這樣,即使黑客獲取了用戶的密碼,由于他們沒有用戶的手機或指紋,也無法完成轉賬操作

在實際應用中,正常情況下可以使用單因素認證,以提高用戶體驗的便捷性。

比如用戶在日常登錄一些普通的資訊類網站時,使用用戶名和密碼進行認證即可。但當出現異常情況,如用戶在異地登錄、更換設備登錄或者進行涉及資金等重要操作時,就需要啟用多因素認證來提升安全性,確保用戶賬戶的安全。

(六)FIDO

FIDO(Fast Identity Online)發布了開放的身份認證標準,其中包含 UAF(Universal Authentication Framework)和 U2F(Universal Second Factor)協議

FIDO 標準支持生物識別等多種認證方式,為用戶提供了更加便捷和安全的認證體驗。以 U2F 協議為例,它允許用戶使用支持 U2F 的設備,如 USB 密鑰、手機等,作為第二因素進行認證。當用戶登錄支持 U2F 的網站時,網站會向用戶的 U2F 設備發送一個挑戰信息,用戶只需將 U2F 設備插入電腦或在手機上確認操作,設備就會生成一個響應信息發送回網站,完成認證過程。

這種方式可以實現無密碼或多因素認證。對于無密碼認證場景,用戶可以通過生物識別(如指紋、面部識別)解鎖 U2F 設備,然后使用設備進行認證,無需再記憶復雜的密碼。而在多因素認證場景中,結合用戶已有的用戶名和密碼,再加上 U2F 設備的認證,大大增強了賬戶的安全性。FIDO 標準的推廣和應用,有望改變傳統的密碼認證模式,為用戶提供更加安全、便捷的身份認證解決方案。

FIDO無密碼認證流程

sequenceDiagramparticipant Userparticipant Clientparticipant Authenticatorparticipant Relying PartyUser->>Client: 發起登錄Client->>Relying Party: 獲取挑戰Relying Party->>Client: 返回挑戰+參數Client->>Authenticator: 簽名請求Authenticator->>User: 生物識別驗證User->>Authenticator: 完成驗證Authenticator->>Client: 返回簽名Client->>Relying Party: 提交認證Relying Party-->>Client: 登錄成功

四、攻擊方式與單點登錄

(一)暴力破解和撞庫

  1. 暴力破解:暴力破解是一種簡單粗暴的攻擊方式。黑客事先準備好一個包含大量弱密碼的列表,同時結合常用的用戶名列表,通過自動化工具不斷嘗試用這些用戶名和密碼組合去登錄目標系統。例如,黑客可能會使用一個腳本,從用戶名列表中依次取出用戶名,再從弱密碼列表中依次取出密碼,不斷向目標網站的登錄接口發送請求。如果某個組合能夠成功登錄,那么黑客就獲取了用戶的賬戶信息。這種攻擊方式對于那些使用弱密碼的用戶來說,具有很大的威脅性。
  2. 撞庫:撞庫攻擊利用了用戶在不同網站使用相同用戶名和密碼的習慣。黑客通過各種非法手段獲取到某個網站的用戶數據庫,其中包含用戶名和密碼(可能是經過哈希處理的)。然后,他們將這些用戶名和密碼在其他網站上進行嘗試登錄。因為很多用戶為了方便記憶,會在多個網站使用相同的賬號密碼組合,所以撞庫攻擊往往能夠成功獲取用戶在其他網站的賬戶信息。比如,黑客獲取了一個小型論壇的用戶數據庫,然后用其中的用戶名和密碼嘗試登錄一些知名的電商平臺或社交網站,一旦有用戶在這些平臺使用了相同的賬號密碼,其賬戶就可能被盜用。
  3. 現代撞庫攻擊鏈
    # Hydra暴力破解示例
    hydra -L userlist.txt -P passlist.txt ftp://192.168.0.1# 防御策略四層架構:
    1. 網絡層:IP信譽庫(如Cloudflare防火墻)
    2. 應用層:驗證碼(Google reCAPTCHA v3)
    3. 數據層:密碼策略(zxcvbn強度評估)
    4. 監控層:異常登錄檢測(UEBA系統)

(二)單點登錄

在傳統的應用架構中,每個應用都擁有獨立的賬號系統。這意味著用戶在使用多個應用時,需要分別在每個應用中注冊賬號并記住不同的用戶名和密碼。例如,用戶在使用公司內部的辦公系統、郵件系統、文件共享系統等多個應用時,需要為每個應用設置不同的賬號密碼,這給用戶帶來了極大的不便。而且,對于企業來說,管理多個獨立的賬號系統也增加了管理成本和安全風險。

單點登錄(Single Sign-On,簡稱 SSO)的出現,有效地解決了這一問題。單點登錄允許用戶使用一組憑證(如用戶名和密碼)登錄到一個中心認證系統,然后在訪問其他相關應用時,無需再次輸入用戶名和密碼。以企業內部的辦公環境為例,用戶通過單點登錄系統登錄到公司的統一認證平臺后,當他訪問公司的郵件系統、OA 系統等其他內部應用時,這些應用會自動從單點登錄系統獲取用戶的認證信息,確認用戶身份后允許用戶直接訪問,無需用戶再次進行登錄操作。這樣,不僅提高了用戶的使用便捷性,也降低了企業的管理成本和安全風險。

(三)Aereo CAS 安全注意事項

Aereo CAS 是一種特定的單點登錄解決方案。官方建議通過服務管理工具來處理 service 中的 URL,這是因為如果直接公開 service 中的 URL,可能會導致互聯網上的非法用戶輕易訪問到相關服務,從而引發安全風險。同時,要避免 service 中的 URL 跳轉至不可信網站。例如,如果一個惡意攻擊者通過某種手段篡改了 service 中的 URL,使其跳轉到一個釣魚網站,那么用戶在使用 Aereo CAS 進行單點登錄時,就可能會在不知情的情況下將自己的賬號密碼輸入到釣魚網站,導致賬戶信息泄露。

在使用 Aereo CAS 時,默認密鑰問題也需要特別關注。在一些低版本的 Aereo CAS 中,存在反序列化漏洞風險。黑客可以利用這些漏洞,通過構造惡意的序列化數據,在應用程序反序列化這些數據時執行任意代碼,從而獲取系統權限或者進行其他惡意操作。為了避免這種風險,用戶應及時修改默認密鑰,使用高強度、隨機生成的密鑰,以增強系統的安全性。

CAS協議安全實現

@startuml
actor User
participant "應用系統 (SP)" as SP
participant "CAS Server" as CASUser -> SP: 訪問資源
SP -> User: 重定向到CAS登錄
User -> CAS: 提交憑證
CAS -> User: 頒發Service Ticket
User -> SP: 提交Ticket
SP -> CAS: 驗證Ticket
CAS -> SP: 返回用戶身份
SP -> User: 授權訪問資源
@enduml

五、認證相關安全概述

認證在 Web 應用安全中起著至關重要的作用,它解決了 “用戶是誰” 的關鍵問題,是保障整個應用安全的核心環節。認證手段多種多樣,不同的認證方式各有其優缺點。通過將多種認證方式組合使用,可以有效地增強安全強度。例如,結合密碼認證和一次性密碼認證,即使密碼被泄露,由于一次性密碼的時效性,黑客也無法輕易登錄用戶賬戶。

傳統的密碼認證方式雖然使用廣泛,但由于弱密碼的存在以及密碼泄露的風險,正逐漸受到新的認證方式的挑戰。隨著技術的不斷發展,如生物識別技術、FIDO 標準等新的認證方式和標準不斷涌現,它們為用戶提供了更加安全、便捷的認證體驗。

主流的單點登錄系統在提升用戶登錄便捷性方面發揮了重要作用。然而,如果使用不當,也會帶來一定的風險。比如,單點登錄系統的認證中心一旦被攻破,黑客就可能獲取到所有用戶的認證信息,進而訪問用戶在各個相關應用中的賬戶。此外,在一些單點登錄系統中,還存在用戶無法完全退出的問題。例如,用戶在使用完某個應用后,雖然在該應用中點擊了退出登錄,但由于單點登錄系統的某些機制問題,用戶在其他相關應用中仍然處于登錄狀態,這可能會導致用戶的賬戶信息在不知情的情況下被泄露

六、OAuth 相關

OAuth 2.0 是目前互聯網領域中極為重要的授權協議。它定義了不同類型的授權模式,每種模式都有其特定的適用場景和操作流程。

  1. 授權碼模式:這是 OAuth 2.0 中最為常用的授權模式。以用戶使用第三方應用(如某音樂播放器)登錄到某音樂平臺為例,用戶在音樂播放器中點擊登錄該音樂平臺的按鈕后,音樂播放器會將用戶重定向到音樂平臺的授權頁面。在授權頁面,用戶需要輸入自己在音樂平臺的賬號密碼進行登錄,并授權音樂播放器訪問自己在音樂平臺的相關資源(如音樂收藏列表)。音樂平臺驗證用戶身份并獲得用戶授權后,會生成一個授權碼,并將用戶重定向回音樂播放器,同時在重定向的 URL 中帶上這個授權碼。音樂播放器收到授權碼后,使用自己在音樂平臺注冊時獲得的客戶端 ID 和客戶端密鑰,向音樂平臺的令牌端點發送請求,換取訪問令牌。音樂播放器獲得訪問令牌后,就可以使用這個令牌訪問用戶在音樂平臺的相關資源。
  2. 隱式授權模式:隱式授權模式適用于一些純前端的應用,如在瀏覽器中運行的 JavaScript 應用。在這種模式下,用戶同樣在第三方應用中發起登錄請求,第三方應用將用戶重定向到授權服務器的授權頁面。用戶授權后,授權服務器會直接在重定向回第三方應用的 URL 中返回訪問令牌,而不需要通過中間的授權碼交換步驟。這種模式的優點是簡單直接,但由于訪問令牌直接暴露在 URL 中,存在一定的安全風險,所以適用于一些對安全性要求相對較低且資源訪問權限有限的場景。
  3. 客戶端憑證模式:客戶端憑證模式主要用于服務端應用之間的授權。例如,一個企業內部的數據分析系統需要訪問企業的數據庫獲取數據進行分析。在這種情況下,數據分析系統作為客戶端,向授權服務器申請訪問令牌時,使用的是自己的客戶端 ID 和客戶端密鑰,而不需要用戶的參與。授權服務器驗證客戶端的身份后,會為其頒發訪問令牌,客戶端使用這個令牌就可以訪問授權范圍內的資源,如數據庫中的特定數據表。

刷新令牌機制

在 OAuth 2.0 中,刷新令牌機制是一項重要的特性。訪問令牌通常有較短的有效期,這是為了降低令牌泄露帶來的風險。一旦訪問令牌過期,應用就無法再使用它訪問受保護的資源。而刷新令牌的作用就是在訪問令牌過期時,用于獲取新的訪問令牌,而無需用戶再次進行完整的授權流程。

繼續以音樂播放器為例,當音樂播放器使用授權碼模式獲取到訪問令牌和刷新令牌后,在訪問令牌的有效期內,它可以順利訪問用戶在音樂平臺的資源。假設訪問令牌的有效期是 1 小時,當 1 小時過去后,音樂播放器再次嘗試訪問資源時,音樂平臺會返回一個表示令牌過期的錯誤響應

七、OIDC 相關

OIDC(OpenID Connect)構建于 OAuth 2.0 協議之上,它為 OAuth 2.0 增添了關鍵的身份認證功能,從而使開發者能夠輕松實現用戶身份的驗證與授權。許多知名社交網站,如 Google、Facebook 等,都大力支持 OIDC,這為用戶登錄各類應用帶來了極大的便利。

從技術層面深入剖析,OIDC 在 OAuth 2.0 的基礎上引入了一系列新的概念與規范。它定義了專門用于描述用戶身份信息的 ID 令牌(ID Token)。當用戶使用支持 OIDC 的社交賬號登錄第三方應用時,流程如下:用戶在第三方應用中點擊使用社交賬號登錄的按鈕,第三方應用隨即引導用戶跳轉至對應的社交網站授權頁面。用戶在該頁面輸入賬號密碼并授權第三方應用訪問其部分信息后,社交網站作為 OIDC 的身份提供者(Identity Provider,簡稱 IdP),會生成一個包含用戶身份信息的 ID 令牌以及用于訪問用戶資源的訪問令牌。這兩個令牌會通過特定的重定向流程傳遞回第三方應用。第三方應用收到令牌后,通過驗證 ID 令牌的簽名等方式,確認用戶身份的真實性與合法性,進而完成整個登錄過程。

以用戶使用 Google 賬號登錄一款在線文檔編輯應用為例,用戶在文檔編輯應用中選擇用 Google 登錄,頁面跳轉到 Google 的登錄與授權界面。用戶登錄并授權后,Google 會向文檔編輯應用返回 ID 令牌和訪問令牌。文檔編輯應用驗證 ID 令牌,從中獲取用戶的郵箱、姓名等身份信息,為用戶創建或關聯對應的應用賬號,使用戶能便捷地開始使用應用功能,而無需在該應用中重新注冊賬號。這種方式不僅簡化了用戶注冊登錄流程,還減少了用戶因需記憶眾多不同平臺賬號密碼而帶來的困擾,同時借助社交平臺強大的安全體系,提升了整個登錄過程的安全性。

八、SAML 相關

SAML(Security Assertion Markup Language),即安全斷言標記語言,在身份提供者(IdP)和服務提供者(Service Provider,簡稱 SP)之間扮演著關鍵的數據交換橋梁角色,主要用于交換身份驗證和授權數據。它采用 XML 格式來結構化和傳輸這些重要信息,具有良好的通用性和擴展性。

在簡化的 SAML 協議認證流程中,用戶首先訪問服務提供者(SP)的應用系統。

例如,一家企業員工試圖訪問外部合作公司提供的特定業務應用(該應用作為 SP)。當員工嘗試訪問時,該應用發現員工未經過身份驗證,于是將用戶的瀏覽器重定向到身份提供者(IdP)的認證頁面,通常是企業內部的統一身份認證系統。員工在身份提供者頁面輸入自己的企業賬號密碼進行登錄。身份提供者驗證員工身份無誤后,會生成包含用戶身份信息、權限信息等內容的 SAML 斷言(Assertion)。這個斷言本質上是一個經過數字簽名的 XML 文檔,以確保信息的完整性和真實性。隨后,身份提供者將用戶的瀏覽器重定向回服務提供者的應用,并在重定向的請求中攜帶 SAML 斷言。服務提供者接收到斷言后,通過驗證簽名等步驟確認斷言的有效性,從而獲取用戶的身份和授權信息,完成用戶的認證過程,允許用戶訪問相應的應用功能。

SAML 協議在企業間的跨域單點登錄場景中應用極為廣泛。比如,企業與多個合作伙伴有業務往來,員工需要訪問合作伙伴提供的各類服務系統。通過 SAML 協議,企業內部的身份認證系統作為身份提供者,能夠與合作伙伴的服務提供者系統進行高效對接,實現員工在不同企業應用間的便捷切換,無需重復登錄,同時保障了身份驗證和授權信息在不同系統間安全、準確地傳遞。

九、CAS 相關

CAS(Central Authentication Service),即中央認證服務,是一種廣泛應用的單點登錄解決方案。它致力于解決用戶在訪問多個相互關聯的應用系統時,避免重復輸入用戶名和密碼的繁瑣問題。

其工作流程具有清晰的邏輯架構。當用戶嘗試訪問某個應用(我們稱之為客戶端應用)時,客戶端應用首先檢查用戶是否已經通過認證。若未認證,客戶端應用會將用戶的請求重定向到 CAS Server。

例如,在一個大型企業內部,員工試圖訪問公司的財務報銷系統,而該系統與 CAS Server 集成。當員工訪問報銷系統時,報銷系統發現員工未登錄,于是將員工的瀏覽器重定向到公司統一的 CAS Server 登錄頁面。員工在 CAS Server 頁面輸入自己的企業賬號密碼進行認證。CAS Server 驗證用戶身份成功后,會為用戶生成一個唯一的票據(Ticket),這個票據類似于一把臨時鑰匙。隨后,CAS Server 將用戶的瀏覽器重定向回客戶端應用(財務報銷系統),并在重定向的 URL 中附上這個票據。客戶端應用接收到票據后,會將票據發送回 CAS Server 進行驗證。CAS Server 確認票據有效后,向客戶端應用返回用戶的身份信息,客戶端應用據此確認用戶身份,允許用戶訪問系統資源,完成整個認證流程。

通過 CAS 實現單點登錄,大大提升了企業內部多個應用系統的用戶體驗,員工只需在 CAS Server 進行一次登錄,即可順暢訪問多個關聯應用,同時減輕了企業對多個應用系統分別進行用戶認證管理的負擔,集中化的認證管理也有助于提高整體的安全性,降低因多套認證系統帶來的安全風險。

總結

在 Web 應用安全領域,身份認證猶如一座大廈的基石,其涉及的各類技術和協議相互交織,共同為用戶和企業的數據安全保駕護航。隨著技術的不斷演進,我們需時刻關注這些認證機制的發展與變化,以應對日益復雜的網絡安全挑戰。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71772.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器python項目部署

角色&#xff1a;root, 其他用戶應該也可以 1. 安裝python3環境 #如果是新機器&#xff0c;盡量執行&#xff0c;避免未知報錯 yum -y update python -v yum install python3 python3 -v2. 使用virtualenvwrapper 創建虛擬環境,并使用workon切換不同的虛擬環境 # 安裝virtua…

更新vscode ,將c++11更新到c++20

要在CentOS系統中安裝最新版本的GCC&#xff0c;你可以使用SCL&#xff08;Software Collections&#xff09;倉庫&#xff0c;它提供了開發工具的最新版本。以下是安裝步驟&#xff1a; 1、 添加SCL倉庫&#xff1a; 首先&#xff0c;添加CentOS的SCL倉庫&#xff0c;該倉庫…

Deeplabv3+改進5:在主干網絡中添加EMAattention|助力漲點!

??【DeepLabv3+改進專欄!探索語義分割新高度】 ?? 你是否在為圖像分割的精度與效率發愁? ?? 本專欄重磅推出: ? 獨家改進策略:融合注意力機制、輕量化設計與多尺度優化 ? 即插即用模塊:ASPP+升級、解碼器 PS:訂閱專欄提供完整代碼 目錄 論文簡介 步驟一 步驟二…

基于自監督三維語義表示學習的視覺語言導航

前言 目前的視覺語言導航存在的問題&#xff1a; &#xff08;1&#xff09;在VLN任務中&#xff0c;大多數當前方法主要利用RGB圖像&#xff0c;忽略了環境固有的豐富三維語義數據。許多語義無關的紋理細節不可避免地被引入到訓練過程中&#xff0c;導致模型出現過擬合問題&…

網絡原理之HTTPS(如果想知道網絡原理中有關HTTPS的知識,那么只看這一篇就足夠了!)

前言&#xff1a;隨著互聯網安全問題日益嚴重&#xff0c;HTTPS已成為保障數據傳輸安全的標準協議&#xff0c;通過加密技術和身份驗證&#xff0c;HTTPS有效防止數據竊取、篡改和中間人攻擊&#xff0c;確保通信雙方的安全和信任。 ???這里是秋刀魚不做夢的BLOG ???想要…

【江協科技STM32】ADC數模轉換器-學習筆記

ADC簡介 ADC&#xff08;Analog-Digital Converter&#xff09;模擬-數字轉換器ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁&#xff0c;ADC是一種將連續的模擬信號轉換為離散的數字信號的設備或模塊12位逐次逼近型…

文件系統文件管理

文件緩沖區&#xff08;內核級&#xff0c;OS內部的&#xff09;存在的意義&#xff1a;系統調用將數據寫入緩沖區后函數即可返回&#xff0c;是從內存到內存的&#xff0c;提高了程序的效率。之后將緩沖區數據刷新到硬盤則是操作系統的事了。無論讀寫&#xff0c;OS都會把數據…

HTML 標簽語義化指南:讓網頁更易讀

HTML 語義化標簽是指在 HTML 中使用具有明確含義的標簽來標記網頁內容的結構和意義。這些標簽可以提供更多的語義信息&#xff0c;有助于搜索引擎理解網頁內容&#xff0c;并為使用輔助技術的用戶提供更好的訪問體驗。 以下是一些常見的HTML語義化標簽及其含義和用途&#xff…

機器學習:線性回歸,梯度下降,多元線性回歸

線性回歸模型 (Linear Regression Model) 梯度下降算法 (Gradient Descent Algorithm) 的數學公式 多元線性回歸&#xff08;Multiple Linear Regression&#xff09;

共繪智慧升級,看永洪科技助力由由集團起航智慧征途

在數字化洪流洶涌澎湃的當下&#xff0c;企業如何乘風破浪&#xff0c;把握轉型升級的黃金機遇&#xff0c;已成為所有企業必須直面的時代命題。由由集團&#xff0c;作為房地產的領航者&#xff0c;始終以前瞻視野引領變革&#xff0c;堅決擁抱數字化浪潮&#xff0c;攜手數字…

laravel es 相關代碼 ElasticSearch

來源&#xff1a; github <?phpnamespace App\Http\Controllers;use Elastic\Elasticsearch\ClientBuilder; use Illuminate\Support\Facades\DB;class ElasticSearch extends Controller {public $client null;public function __construct(){$this->client ClientB…

阿里發布新開源視頻生成模型Wan-Video,支持文生圖和圖生圖,最低6G就能跑,ComFyUI可用!

Wan-Video 模型介紹&#xff1a;包括 Wan-Video-1.3B-T2V 和 Wan-Video-14B-T2V 兩個版本&#xff0c;分別支持文本到視頻&#xff08;T2V&#xff09;和圖像到視頻&#xff08;I2V&#xff09;生成。14B 版本需要更高的 VRAM 配置。 Wan2.1 是一套全面開放的視頻基礎模型&…

閉包函數是什么?

閉包函數是 JavaScript 中一個非常重要且強大的概念&#xff0c;下面將從定義、形成條件、作用、示例以及優缺點等方面詳細介紹閉包函數。 定義 閉包是指有權訪問另一個函數作用域中的變量的函數。簡單來說&#xff0c;即使該函數執行完畢&#xff0c;其作用域內的變量也不會…

nuxt2 打包優化使用“compression-webpack-plugin”插件

在使用 Nuxt.js 構建項目時&#xff0c;為了提高性能&#xff0c;通常會考慮對靜態資源進行壓縮。compression-webpack-plugin 是一個常用的 Webpack 插件&#xff0c;用于在生產環境中對文件進行 Gzip 壓縮。這對于減少網絡傳輸時間和提高頁面加載速度非常有幫助。下面是如何在…

大型語言模型訓練的三個階段:Pre-Train、Instruction Fine-tuning、RLHF (PPO / DPO / GRPO)

前言 如果你對這篇文章可感興趣&#xff0c;可以點擊「【訪客必讀 - 指引頁】一文囊括主頁內所有高質量博客」&#xff0c;查看完整博客分類與對應鏈接。 當前的大型語言模型訓練大致可以分為如下三個階段&#xff1a; Pre-train&#xff1a;根據大量可獲得的文本資料&#…

模型壓縮技術(二),模型量化讓模型“輕裝上陣”

一、技術應用背景 在人工智能蓬勃發展的浪潮下&#xff0c;大模型在自然語言處理、計算機視覺等諸多領域大放異彩&#xff0c;像知名的GPT以及各類開源大語言模型&#xff0c;其規模與復雜度持續攀升。然而&#xff0c;這一發展也帶來了挑戰&#xff0c;模型越大&#xff0c;對…

機器學習:愚者未完成的詩篇(零)

當算法在數據海洋中打撈支離破碎的韻律時&#xff0c;機器學習系統展現出的智慧如同斷臂的維納斯雕像——完美與殘缺構成令人戰栗的美學悖論。愚者&#xff0c;在詞語的混沌中編織邏輯經緯&#xff0c;卻總在即將觸及詩性本質的瞬間&#xff0c;暴露出認知維度的致命裂隙。 一…

【算法題】小魚的航程

問題&#xff1a; 分析 分析題目&#xff0c;可以看出&#xff0c;給你一個開始的星期&#xff0c;再給一個總共天數&#xff0c;在這些天內&#xff0c;只有周六周日休息&#xff0c;其他全要游泳250公里。 那分支處理好啦 當星期為6時&#xff0c;需要消耗2天&#xff0c;…

GStreamer —— 2.5、Windows下Qt加載GStreamer庫后運行 - “教程5:GUI 工具包集成(gtk)“(附:完整源碼)

運行效果 簡介 上一個教程演示了時間管理及seek操作。本教程介紹如何將 GStreamer 集成到圖形用戶中 接口 &#xff08;GUI&#xff09; 工具包&#xff0c;如 GTK。基本上 GStreamer 負責媒體播放&#xff0c;而 GUI 工具包處理 用戶交互。最有趣的部分是那些 庫必須進行交互&…

NLTK和jieba

NLTK與jieba概述 自然語言處理&#xff08;NLP&#xff09;領域是計算機科學領域與人工智能領域中的一個重要方向&#xff0c;主要研究方向是實現人與計算機之間用自然語言進行有效通信的各種理論和方法。 在自然語言處理領域中&#xff0c;文本類型的數據占據著很大的市場&a…