javascript
Http基本身份验证在Spring Security中如何工作?
在上一篇文章中,您學(xué)習(xí)了如何在基于Spring安全性的Java應(yīng)用程序中啟用Http基本身份驗(yàn)證 ,現(xiàn)在,我們將進(jìn)一步進(jìn)一步了解http基本身份驗(yàn)證在Spring安全性中的工作原理。 如果您還記得的話,當(dāng)您使用HTTP Basic進(jìn)行身份驗(yàn)證時,客戶端(例如瀏覽器或其他客戶端)會在http請求標(biāo)頭中發(fā)送登錄憑據(jù)。 標(biāo)頭恰當(dāng)?shù)孛麨?#34;Authorization ”,它包含基于64的編碼字符串,該字符串是通過使用冒號將用戶名和密碼連接起來而創(chuàng)建的,例如,如果用戶名是"johnsmith"而密碼是"JOHN3214"則它們將被連接為在使用base 64編碼算法編碼之前,先輸入"johnsmith:JOHN3214" 。
服務(wù)器在接收到此類請求時,將提取"Authorization"標(biāo)頭的值,并使用用于驗(yàn)證用戶身份的相同算法Base64對該標(biāo)頭的內(nèi)容進(jìn)行解碼。
如果您還記得的話,我們使用<http-basic>l; 在XML配置或httpBasic()上方法HttpSecurity目的是能夠基本驗(yàn)證。
現(xiàn)在,讓我們看一下Spring安全性如何確切地支持Http Basic身份驗(yàn)證,以及當(dāng)它收到登錄請求并在服務(wù)器端啟用Http Basic身份驗(yàn)證時,事物如何在Spring安全性空間內(nèi)移動。
Spring Security如何處理Http基本身份驗(yàn)證請求
當(dāng)您使用<http-basic>l; 配置元素,Spring Security的BasicAuthenticationFitler出現(xiàn)在圖中,它基本上檢查傳入的HTTP請求是否包含"Authorization"標(biāo)頭,并且其值以“ Basic”開頭。
啟動時還將BasicAuthenticationEntryPoint策略配置到ExceptionTranslationFilter中,該策略用于處理不包含“ Authorization”標(biāo)頭的請求。
當(dāng)您從瀏覽器向受保護(hù)的URL(例如/admin/users發(fā)出http請求而未添加“ Authorization ”標(biāo)頭時,Spring Security會拋出一個由ExceptionTranslationFilter處理的拒絕訪問的ExceptionTranslationFilter 。
然后,此過濾器將委派給AuthenticationEntryPoint接口的特定實(shí)現(xiàn)策略 ,在本例中為BaicAuthenticationEntryPoint 。
此類在響應(yīng)中添加標(biāo)頭“ WWW-Authenticate:Basic real =” Spring Security Application”,然后將401(未經(jīng)授權(quán))的HTTP狀態(tài)代碼發(fā)送給客戶端(例如您的瀏覽器),該瀏覽器知道如何處理此代碼并起作用相應(yīng)地,即顯示一個對話框,提示您輸入用戶名和密碼,如下所示:
當(dāng)您輸入用戶名和密碼并提交請求時,請求再次遵循過濾器鏈,直到到達(dá)BasicAuthenticationFilter為止。
此過濾器檢查請求標(biāo)頭,以“ Basic ”開頭的Authorization標(biāo)頭的位置,例如Authorization:Basic CDWhZGRpbjpvcGVuc2AzYW11。
然后, BaicAuthentictionFilter提取“ Authorization ”標(biāo)頭的內(nèi)容,并使用Base64算法解碼登錄憑據(jù),以從解碼的String中提取用戶名和密碼。
一旦有了該信息,過濾器就會創(chuàng)建一個UsernamePasswordAuthenticationToken對象,并將其發(fā)送到身份驗(yàn)證管理器以標(biāo)準(zhǔn)方式進(jìn)行身份驗(yàn)證。
如果您不知道AuthenticationManager在Spring安全性登錄中的作用,那么您可以在Eugen的Learn Spring Security課程中了解有關(guān)AuthenticationManager更多信息。
身份驗(yàn)證管理器將要求身份驗(yàn)證提供程序(例如,在內(nèi)存中,基于JDBC的備份或基于LDAP的身份驗(yàn)證程序)檢索用戶,然后使用它創(chuàng)建一個身份驗(yàn)證對象。 該過程是標(biāo)準(zhǔn)的,并且獨(dú)立于將HTTP基本用于身份驗(yàn)證,例如也適用于摘要身份驗(yàn)證。
如果您使用的是RESTful Web服務(wù),則還可以使用curl命令發(fā)送帶有“授權(quán)”錯誤的HTTP請求,以進(jìn)行HTTP基本身份驗(yàn)證。 我發(fā)現(xiàn)curl是通過從命令行發(fā)送各種HTTP命令來測試Web服務(wù)的簡便方法。
您還可以在我的文章中看到如何測試RESTful Web服務(wù),以找到一些curl的實(shí)際示例,例如發(fā)送發(fā)布請求,使用HTTP基本和摘要身份驗(yàn)證發(fā)送請求等。
順便說一句,就像我之前說過的那樣,基本身份驗(yàn)證并不安全,任何能夠攔截請求的人都可以解碼密碼,因此它僅用于測試目的,而更復(fù)雜的摘要身份驗(yàn)證和OAuth用于實(shí)際應(yīng)用中,特別是如果您想保護(hù)REST API。
在接下來的文章中,我將告訴您更多有關(guān)保護(hù)REST API的信息,但是如果您迫不及待,建議您使用Spring MasterClass來檢閱REST,Spring MasterClass最近也針對Spring Framework 5和Spring Security 5進(jìn)行了更新。
這就是Spring Security內(nèi)部HTTP基本身份驗(yàn)證如何工作的全部內(nèi)容。 您已經(jīng)了解了HTTP請求命中受保護(hù)的URL并請求基本身份驗(yàn)證時發(fā)生的情況的完整工作流程。 基本上是BasicAuthenticationFilter和BasicAuthenticationEntryPoint一起完成大部分工作。
其他Spring Security教程和資源
學(xué)習(xí)Spring Security 4 Basic動手
Spring MVC中@RestController和@Controller之間的區(qū)別?
Spring中@RequestParam和@PathVaraible之間的區(qū)別?
3個在線課程,可以更好地學(xué)習(xí)Spring Security
Spring中@ Service,@ Component和@Controller之間的區(qū)別?
5門學(xué)習(xí)Spring Core,Spring MVC和Spring Boot的課程
Eugen Paraschiv的Spring安全認(rèn)證課程
感謝您閱讀本文,如果您喜歡我對Spring Security中Http Basic身份驗(yàn)證如何工作的解釋,請與您的朋友和同事分享此文章。 如果您對反饋有任何疑問,請留下注釋。
翻譯自: https://www.javacodegeeks.com/2018/01/http-basic-authentication-works-spring-security.html
總結(jié)
以上是生活随笔為你收集整理的Http基本身份验证在Spring Security中如何工作?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: debian linux教程(debia
- 下一篇: 进口肉类备案(肉制品备案)