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