登錄工程:傳統 Web 應用中的身份驗證技術

2021-02-25 dotNET跨平臺

標題中 「傳統 Web 應用」 這一說法也並沒有什麼官方定義,只是為了與「現代化 Web 應用」形成比較而自擬的一個概念。所謂現代化 Web 應用指的是那些基於分布式架構思想設計的,面向多個端提供穩定可靠的高可用服務,並且在需要時能夠橫向擴展的 Web 應用。相對而言,傳統 Web 應用則主要是直接面向 PC 用戶的 Web 應用程式,採用單體架構較多,也可能在內部採用 SOA 的分布式運算技術。

一直以來,傳統 Web 應用為構成網際網路發揮了重要作用。因此傳統 Web 應用中的身份驗證技術經過了幾代的發展,已經解決了不少實際問題,並最終沉澱了一些實踐模式。


安全議題不容忽視

在講述多種身份鑑權技術之前,要強調一點:在構建網際網路 Web 應用過程中,無論使用哪種技術,在傳輸用戶名和密碼時,請一定要採用安全連接。因為無論採用何種鑑權模型,都無法保護用戶憑據在傳輸過程中不被竊取。

Basic 和 Digest 鑑權


基於 HTTP 的 Web 應用離不開 HTTP 本身的安全特性中關於身份鑑權的部分。雖然 HTTP 標準定義了好幾種鑑權方式,但真正供 Web 應用開發者選擇的並不多,這裡簡要回顧一下曾經被廣泛運用過的 Basic 和 Digest 鑑權。

不知道讀者是否熟悉一種最直接向伺服器提供身份的方式,即在 URL 中直接寫上用戶名和密碼:

http://user:passwd@www.server.com/index.html

這就是 Basic 鑑權的一種形式。

Basic 和 Digest 是通過在 HTTP 請求頭中直接包含用戶名和密碼,或者它們的哈希值來向伺服器傳輸用戶憑據的方法。Basic 鑑權直接在每個請求請求的頭部或 URL 中包含明文的用戶名或密碼,或者經過 Base64 編碼過的用戶名或密碼;而 Digest 則會使用伺服器返回的隨機值,對用戶名和密碼拼裝後,使用多次 MD5 哈希處理後再向伺服器傳輸。伺服器在處理每個請求之前,讀取收到的憑據,並鑑定用戶的身份。

Basic 和 Digest 鑑權有一系列的缺陷。它們需要在每個請求中提供憑據,因此提供「記住登錄狀態」功能的網站中,不得不將用戶憑據緩存在瀏覽器中,增加了用戶的安全風險。Basic 鑑權基本不對用戶名和密碼等敏感信息進行預處理,所以只適合於較安全的安全環境,如通過 HTTPS 安全連接傳輸,或者區域網。看起來更安全的 Digest 在非安全連接傳輸過程中,也無法抵禦中間人通過篡改響應來要求客戶端降級為 Basic 鑑權的攻擊。Digest 鑑權還有一個缺陷:由於在伺服器端需要核對收到的、由客戶端經過多次 MD5 哈希值的合法性,需要使用原始密碼做相同的運算,這讓伺服器無法在存儲密碼之前對其進行不可逆的加密。Basic 和 Digest 鑑權的缺陷決定了它們不可能在網際網路 Web 應用中被大量採用。

簡單實用的登錄技術


對於網際網路 Web 應用來說,不採用 Basic 或 Digest 鑑權的理由主要有兩個:

1. 不能接受在每個請求中發送用戶名和密碼憑據
2. 需要在伺服器端對密碼進行不可逆的加密

因此,網際網路 Web 應用開發已經形成了一個基本的實踐模式,能夠在服務端對密碼強加密之後存儲,並且儘量減少鑑權過程中對憑據的傳輸。其過程如下圖所示:


基於 Cookie 和 Session  的鑑權過程

這一過程的原理很簡單,專門發送一個鑑權請求,只在這個請求中包含原始用戶名和密碼憑據,經伺服器驗證合法之後,由伺服器發給一個會話標識(Session ID),客戶端將會話標識存儲在 Cookie 中,伺服器記錄會話標識與經過驗證的用戶的對應關係;後續客戶端使用會話標識、而不是原始憑據去與伺服器交互,伺服器讀取到會話標識後從自身的會話存儲中讀取已在第一個鑑權請求中驗證過的用戶身份。為了保護用戶的原始憑據在傳輸中的安全,只需要為第一個鑑權請求構建安全連接支持。

服務端的代碼包含首次鑑權和後續檢查並授權訪問的過程:

IUser user;
if( validateLogin( nameFromReq, pwdFromReq, out user )){
    Session["CurrentUser"] = user;
}

(首次鑑權)

IUser user = Session["CurrentUser"] as IUser;
if( user == null ){
    Response.Redirect( "/login?return_uri=" + Request.Url.ToString() );
    return;
}

(後續檢查並拒絕未識別的用戶)

類似這樣的技術簡易方便,容易操作,因此大量被運用於很多網際網路 Web 應用中。它在客戶端和傳輸憑據過程中幾乎沒有做特殊處理,所以在這兩個環節尤其要注意對用戶憑據的保護。不過,隨著我們對系統的要求越來越複雜,這樣簡易的實現方式也有一些明顯的不足。比如,如果不加以封裝,很容易出現在伺服器應用程式代碼中出現大量對用戶身份的重複檢查、錯誤的重定向等;不過最明顯的問題可能是對伺服器會話存儲的依賴,伺服器程序的會話存儲往往在伺服器程序重啟之後丟失,因此可能會導致用戶突然被登出的情況。雖然可以引入單獨的會話存儲程序來避免這類問題,但引入一個新的中間件就會增加系統的複雜性。

傳統 Web 應用中身份驗證最佳實踐


上文提到的簡單實用的登錄技術已經可以幫助建立對用戶身份驗證的基本圖景,在一些簡單的應用場景中已經足夠滿足需求了。然而,用戶鑑權就是那種「你可以有很多種方法,就是不怎麼優雅」 的問題。

最佳實踐指的是那些經過了大量驗證,被證明有用的方法。而用戶鑑權的最佳實踐就是使用自包含的、含有加密內容的 Cookie 作為替代憑據。其鑑權過程與上文所提到基於會話標識的技術沒有什麼區別,而主要區別在於不再頒發會話標識,取而代之的是一個代表身份的、經過加密的 「身份 Cookie」。

1. 只在鑑權請求中發送一次用戶名和密碼憑據
2. 成功憑據之後,由伺服器生成代表用戶身份的 Cookie,發送給客戶端
3. 客戶端在後續請求中攜帶上一步中收到的 「身份 Cookie」
4. 伺服器解密"身份 Cookie",並對需要訪問的資源予以授權

這樣,我們消除了對伺服器會話存儲的依賴,Cookie 本身就有有效期的概念,因此順便能夠輕鬆提供「記住登錄狀態」的功能。

另外,由於解密 Cookie 既而檢查用戶身份的操作相對繁瑣,迫使工程師不得不考慮對其抽取專門的服務,最終採用了面向切面的模式對身份驗證的過程進行了封裝,而開發時只需要使用一些特性標註(Attribute Annotation)對特定資源予以標記即可輕鬆完成身份驗證預處理。

傳統 Web 應用中的單點登錄


單點登錄的需求在向用戶提供多種服務的企業普遍存在,出發點是希望用戶在一個站點中登錄之後,在其他兄弟站點中就不需要再次登錄。

如果多個子站所在頂級域名一致,基於上文所述的實踐,可以基於 Cookie 共享實現最簡單的單點登錄:在多個子站中使用相同的加密、解密配置,並且在用戶登錄成功後設置身份 Cookie 時將 domain 值設置為頂級域名即可。這樣,只要在其中一個網站登錄,其身份 Cookie 將在用戶訪問其他子站時也一起帶上。不過實際情況中,這個方案的應用場景很有限,畢竟各個子站使用的用戶數據模型可能不完全一致,而加密密鑰多處共享也增加了伺服器應用程式的安全風險。

對於單點登錄需求來說,域名相同與否並不是最大的挑戰,集成登錄系統對各個子站點的系統在設計上的影響才是。我們希望便利用戶的同時,也期待各個子系統仍擁有獨立用戶身份、獨立管理和運維的靈活性。因此我們引入獨立的鑑權子站點。當用戶到達業務站點 A 時,被重定向到鑑權站點;登錄成功之後,用戶被重定向回到業務站點 A、同時附加一個指示「已有用戶登錄」的令牌串——此時業務站點 A 使用令牌串,在伺服器端從鑑權子站點查詢並記錄當前已登錄的用戶。當用戶到達業務站點 B 時,執行相同流程。由於已有用戶登錄,所以用戶登錄的過程會被自動省略。

這樣的單點登錄系統能夠較好地解決在多個站點中共享用戶登錄狀態的需求。不過,如果在編程實踐過程中略有差池,就會讓用戶陷入巨大的安全風險中。例如,在上述重定向過程中,一旦鑑權系統未能驗證返回 URL 的合法性,就容易導致用戶被釣魚網站利用。在傳統 Web 應用開發實踐中,被廣泛部署的身份驗證體系是比較重量級的 WS-Federation 和相對輕量級的 OpenID 等技術。


總結

本文簡要總結了傳統 Web 應用中被廣泛使用的幾種典型的用戶登錄時的鑑權處理流程。總體來說,在單體 Web 應用中,身份驗證過程並不複雜,只要稍加管理,可以較輕鬆地解決用戶鑑權的問題。但在傳統 Web 應用中,為了解決單點登錄的需求,人們也嘗試了多種方式,最終仍然只有使用一些較複雜的方案才能較好地解決問題。

在現代化 Web 應用中,圍繞登錄這一需求,儼然已經衍生出了一個新的工程。「登錄工程」 並不簡單,在後續篇目中將會介紹現代化 Web 應用的典型需求及解決方法。

原文地址:http://www.jianshu.com/p/6ca51a8d66bd

.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注

相關焦點

  • 登錄工程:傳統 Web 應用中的身份驗證技術|洞見
    因此傳統Web應用中的身份驗證技術經過幾代的發展,已經解決了不少實際問題,並最終沉澱了一些實踐模式。在講述多種身份鑑權技術之前,要強調一點:在構建網際網路Web應用過程中,無論使用哪種技術,在傳輸用戶名和密碼時,請一定要採用安全連接模式。因為無論採用何種鑑權模型,都無法保護用戶憑據在傳輸過程中不被竊取。
  • 中國工程建設標準化協會標準《固化土道路應用技術規程》第一次編制工作會議召開
    《固化土道路應用技術規程》編制組第一次工作會議,於2018年4月19日在北京京燕飯店隆重召開。來自中國工程建設標準化協會等相關領導參加了本次會議,北京市政工程設計研究總院、北京市建築材料研究總院、長安大學、蘇交科集團有限公司等國內從事固化土研究與應用及規程編制管理有關單位30餘位專家、代表參加了會議。並特邀天津市政工程設計研究院、交通運輸部公路科學研究院及北京航空航天大學3位專家出席會議。
  • 史上最難遊戲:驗證登錄
    本來覺得 12306 的登錄驗證已經夠變態了沒想到 PlayStation 更厲害!它的登錄驗證沿用谷歌的 reCAPTCHA 驗證系統,你必須向系統證明,你不是個機器人。。。國外一個遊戲博主就被 PlayStation 的登錄驗證給「搞瘋」了。。
  • 【案例分享】蜂巢格室柔性生態擋牆護坡技術在西甘公路生態修復工程中的應用
    在西甘公路生態修復工程中的應用省道S103線西寧至甘禪口公路病害整治與生態修復工程項目(以下簡稱「西甘公路生態修復工程」)地處黃土高原與青藏高原交接帶。圍繞項目特點,項目實施團隊提出了道路邊坡生態修復綜合解決方案,通過對地質結構和土壤的高度重視,保證邊坡安全及建立完整的土壤基質環境,綜合考量高寒高海拔區域工程中涉及的光照、溫度、水分和坡向等生態因子,遵循自然植被演替規律進行植物配置設計,優先考慮鄉土植物及當地優勢物種等多種方式,實現工程學、土壤學和生態學等多學科的融合,結合採用國內成熟的掛網厚層基材噴播復綠技術、植被混凝土和防衝刷基材生態護坡技術、
  • 博智新聞丨新時代、新技術、新管理——BIM技術在施工管理中的應用研討會成功舉辦!
    2018年11月8日,由江蘇博智工程諮詢有限公司主辦,上海魯班軟體股份有限公司協辦的BIM技術在施工管理中的應用研討會在徐州成功召開。會議圍繞BIM技術在項目管理上的應用,從進度、質量、安全、成本、技術、協同6大方面為項目管理提供精細化管理方案。會議特邀同行專家講解BIM時代下項目管理的新趨勢,得到了與會同行業領導及同仁的高度認可!
  • 解析:物聯網技術在智慧旅遊中的應用
    近年來,隨著物聯網、大數據、雲計算等新技術在旅遊業的深入應用,旅遊業的精細化管理和個性化服務需求也隨之不斷提升,智慧旅遊的應用使旅遊運作、旅遊管理和支付方式等發生了巨大變化
  • 建設蝶變丨新技術層出不窮 「魔幻工程」越來越多
    合璧津高速控制性工程九峰山隧道全長3083米(左右分離式),穿越煤層、溶洞、煤礦採空區等,湧水、突泥比較嚴重,軟弱圍巖佔比高,圍巖等級差,堪稱「西南地區地質狀況博物館」。施工人員在隧道建設中使出了「十八般武藝」。比如,去年6月,九峰山隧道左線的施工人員用超前鑽機對前方進行地質探測時,發現隧道前方60米處極可能存在巨大溶洞。
  • 2020第四屆生物識別技術與應用論壇誠邀您的參與
    」,屆時芯智訊將邀請生物識別技術領域的相關代表廠商及上遊供應鏈廠商共同探討新冠疫情之下的生物識別及相關技術的發展和應用。與此同時,聲紋識別技術也在疫情期間的遠程辦公、遠程健康回訪等方面得到了應用。此外,用於檢測疑似發熱患者的紅外測溫技術與人臉識別乃至AR技術的結合,也得到了大力的應用。這些技術在這場科技戰「疫」當中都發揮了積極的作用。 此次疫情也給眾多生物識別技的應用帶來了新的挑戰和機遇。
  • 教程:如何開啟 Apple ID 兩步驗證
    這樣即使是Appleid洩露被暴力破解或猜出登錄密碼也無濟於事…接下來我們講講開啟方法! 啟用 Apple ID 兩步驗證方法第一步:打開 Safari 瀏覽器,前往 Apple ID 管理頁面。點擊「管理您的 Apple ID」按鈕。如圖
  • 繞過WiFi驗證:黑客教你免費使用WiFi
    不過有時即便我們的設備連上了WiFi,當隨便打開一個網頁就會立即彈出身份驗證頁面……是不是很鬱悶?藉此新春佳節,向大家分享幾種繞過常見WiFi身份驗證的方法,祝各位過個開心年。需要身份認證的WiFi這是一種開放的WiFi網絡。在真正使用該網絡之前,當訪問任意網頁時,通常你會遇到一個強制的身份認證的頁面——只有在你輸入了正確的用戶名和密碼之後才能開始使用該網絡。
  • 講座預告:夜光遙感技術在人道主義災難評估中的應用
    夜光遙感技術在人道主義災難評估中的應用Application of night-time light remote sensing
  • 國稅局打擊退稅欺詐:合法納稅人也被身份驗證!
    根據美國國稅局(IRS)的最新數據,2018年前10個月,申報退稅身份盜竊的受害者數量較2017年同期下降了19%,較2015年同期下降了72%。不過,納稅人權益倡導辦公室(Office of the tax Advocate)的負責人尼娜•奧爾森(Nina Olson)表示,仍然有太多合法的納稅人陷入身份核查過程裡,去年,幾乎三分之二的納稅人經歷了身份驗證。
  • 道默在回收塑料應用技術日上展示TECHNYL 4EARTH和ECONAMID
    為加速全球可持續發展塑料解決方案的推廣,DOMO化學於12月18日在上海沃爾沃亞太區總部舉辦的沃爾沃汽車亞太區回收塑料應用技術交流會上展示了
  • 最新議程 | 2020可降解塑料應用技術研討會(附參會名單)
    由 中國塑膜網 攜手 凌傲諮詢 聯合主辦的《2020可降解塑料應用技術研討會》將於12月24-25日在上海舉行。本次會議將重點關注包裝、農膜、醫療、環保袋、一次性用品應用和解決方案。本次會議的亮點在於,從可降解塑料應用端/終端的實際使用情況和使用環境出發,提出對可降解塑料的性能及成本等方面的需求。並將廣泛邀請可降解塑料的應用端/終端使用者出席,聆聽他們的見解。
  • 有人@你:12306買火車票要手機驗證了!附全攻略~
    不提前驗證好,著急買票時會比較麻煩!這次雙向驗證,就是把身份證號和手機號再進行一個綁定。記者從鐵路部門了解到,這項服務是為了防止身份信息被搶註,防止身份證號被冒用或盜用。同時,雙向驗證後,乘客即使忘記用戶名也能直接手機號登錄。
  • 烏魯木齊蘋果用戶切記:iPhone自動彈iCloud登錄窗,別點!
    iCloud登錄頁面「李鬼」多 登錄時需慎重在登錄iCloud網頁版時,一定要注意網站的真偽。由於蘋果手機刷機和換機必須解除Apple ID綁定,在iPhone被盜後進行交易的黑色市場中,破解Apple ID鎖定的需求越來越大。因此,使用釣魚郵件並偽造iCloud網站的手法蔚然成風。
  • 【蘋果用戶注意】自動彈iCloud登錄窗?小心已「被黑」
    iCloud登錄頁面「李鬼」多 登錄時需慎重在登錄iCloud網頁版時,一定要注意網站的真偽。由於蘋果手機刷機和換機必須解除Apple ID綁定,在iPhone被盜後進行交易的黑色市場中,破解Apple ID鎖定的需求越來越大。因此,使用釣魚郵件並偽造iCloud網站的手法蔚然成風。
  • 【頁巖氣】泡沫水泥固井技術首次在涪陵頁巖氣田應用
    (點擊右上角「查看公眾號」即可添加我們哦!) 5月3日,勘探分公司部署在涪陵頁巖氣田外圍第一口中深層頁巖氣科學實驗井焦頁9井成功應用泡沫水泥固井技術完成技套固井施工,標誌著泡沫水泥固井技術首次在涪陵頁巖氣田固井中應用取得圓滿成功,為頁巖氣井固井開闢了新的通道。
  • 劉雙合「風帆48V系統及起停電池技術應用」-先進電池材料
    在「微混/輕混混合動力車先進電池的技術與市場應用進展及趨勢」分論壇上,來自風帆有限責任公司 劉雙合副總經理 做了「風帆48V系統及起停電池技術應用」的主題發言。劉雙合首先非常感謝論壇主席汪繼強先生、肖成偉博士、張正銘博士的邀請。我展示的主題是風帆48V系統及起停電池技術應用。
  • 【提醒】12306喊你3日前驗證手機?別慌!明天不是最後期限
    據了解,近期尚未進行手機核驗的旅客登錄12306網站時都會收到「須在三日內進行核驗」的通知,但並非所有人都要在12月2日或3日前完成核驗,因此小夥伴們可不必趕在明天核驗身份哦~下面就跟著廣仔來弄個明白↓