如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证
在上一篇文章中,我向您展示了如何在Java應(yīng)用程序中啟用Spring安全性 ,今天我們將討論如何使用Spring Security 在Java Web應(yīng)用程序中啟用Basic HTTP身份驗(yàn)證 。 如果您使用的是Spring Security 3.1或更低版本,我將向您展示如何同時(shí)使用Java配置和XML配置,但是在此之前,讓我們了解一下
什么是Http基本身份驗(yàn)證 ,為什么需要它? 在Web應(yīng)用程序中對(duì)用戶進(jìn)行身份驗(yàn)證的最常見方法之一是使用表單登錄,即,您提供登錄頁面,用戶將輸入其用戶名和密碼進(jìn)行身份驗(yàn)證。 這對(duì)人類用戶非常有用,但是有時(shí)您無法使用登錄表單進(jìn)行身份驗(yàn)證。
例如,如果您的應(yīng)用程序用戶不是人類用戶或其他應(yīng)用程序,則不適合使用表單登錄。 例如,在RESTful Web服務(wù)客戶端不是人工的情況下,而不是在其他服務(wù)器上運(yùn)行某些其他應(yīng)用程序的情況下,這也很常見。
在許多這樣的場(chǎng)景中,您的客戶端不是人工的,而是其他系統(tǒng),例如,所有JMS客戶端在沒有用戶交互的情況下生成和使用消息,并且ESB系統(tǒng)集成應(yīng)用程序也是如此。
如果您正在處理這種情況,那么您需要考慮啟用身份驗(yàn)證而不是表單登錄。 在那種情況下,使用HTTP Basic身份驗(yàn)證來驗(yàn)證服務(wù)用戶是有意義的。
HTTP基本身份驗(yàn)證如何工作
如果使用HTTP基本身份驗(yàn)證,則不使用表單,而是在HTTP請(qǐng)求標(biāo)頭上傳遞用戶登錄憑據(jù),恰好是“授權(quán)”請(qǐng)求標(biāo)頭。 該標(biāo)頭允許您將用戶名和密碼發(fā)送到請(qǐng)求標(biāo)頭中,而不是在請(qǐng)求正文中發(fā)送,就像表單登錄身份驗(yàn)證一樣。 這是驗(yàn)證REST客戶端的理想選擇。
啟用HTTP基本身份驗(yàn)證后,正在發(fā)送請(qǐng)求的客戶端(例如,瀏覽器或REST客戶端)將用戶名和密碼連接在一起,并在它們之間使用冒號(hào),然后使用Base64編碼對(duì)所得字符串進(jìn)行編碼。 然后將此字符串發(fā)送到請(qǐng)求的“ Authorization”標(biāo)頭中。
例如,如果您的REST客戶端使用用戶名"userId"和密碼"passwd" ,則客戶端將創(chuàng)建字符串"userId:passwd"并以64為基數(shù)對(duì)其進(jìn)行編碼,然后再將其發(fā)送到Authentication標(biāo)頭中。
當(dāng)此請(qǐng)求到達(dá)服務(wù)器時(shí),服務(wù)器將提取Authorization標(biāo)頭的值,并使用base64算法對(duì)密碼進(jìn)行解碼并驗(yàn)證用戶身份。
如果請(qǐng)求沒有身份驗(yàn)證標(biāo)頭,則服務(wù)器將拒絕請(qǐng)求并返回401響應(yīng),并附加標(biāo)頭"WWW-Authenticate : Basic realm"以指示客戶端需要在請(qǐng)求標(biāo)頭中發(fā)送用戶名和密碼以進(jìn)行身份??驗(yàn)證。
如果使用瀏覽器,它將讀取該響應(yīng)并顯示一個(gè)登錄對(duì)話框,以允許您輸入用戶名和密碼。 順便說一句,這不是發(fā)送登錄憑據(jù)的最安全的方法,因?yàn)槟吹降闹皇腔?4位的編碼。
有更好的方法來對(duì)用戶進(jìn)行身份驗(yàn)證,例如,使用Spring 5中引入的摘要身份驗(yàn)證和OAuth 2.0。稍后我將詳細(xì)介紹,但如果您有興趣,可以查看
Baeldung提供的Spring Security認(rèn)證課程 ,以進(jìn)一步了解它們。
如何使用XML配置在Spring Security中啟用Http基本身份驗(yàn)證
如果您正在使用XML配置文件在應(yīng)用程序中啟用Spring安全性或在Spring security 3.1或更低版本上工作,則可以使用<http-basic />配置元素在Java Web應(yīng)用程序中啟用Http基本身份驗(yàn)證。
如果使用表單登錄,則可以將配置文件applicationContext-security.xml的<login-form>元素替換為<http-basic /> 。
您還需要在配置文件中包含Spring安全名稱空間,然后重新啟動(dòng)應(yīng)用程序以選擇此更改。 如果您不了解什么是名稱空間及其如何幫助您編寫簡(jiǎn)潔的配置文件,建議您閱讀Craig Walls編寫的Spring in Action 4th Edition 。 關(guān)于Spring框架的出色入門書籍,它基于Spring安全性和Spring引導(dǎo)。
啟用HTTP基本身份驗(yàn)證的示例Spring安全配置文件如下所示:
applicationContext-security.xml
<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation=" http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><http pattern="/home" security="none"/> <http use-expressions="true"><intercept-url pattern="/**" access="isAuthenticated()" /><http-basic /> </http><authentication-manager><authentication-provider><user-service><user name="userId" password="passwd" authorities="ROLE_USER" /></user-service></authentication-provider> </authentication-manager></beans:beans>Read more: http://javarevisited.blogspot.com/2018/01/how-to-enable-http-basic-authentication-spring-security-java-xml-configuration.html#ixzz54Qt8drKX在這種情況下,只有相關(guān)信息是<http-basic />標(biāo)記,該標(biāo)記為整個(gè)應(yīng)用程序啟用HTTP基本身份驗(yàn)證,但讓我稍微解釋一下配置:
1)第一行說對(duì)于/ home,我們不需要任何安全性,因此任何人都可以訪問它。
2)第二行<http>說我們正在使用Spring表達(dá)式語言,這就是為什么我們可以使用isAuthenticated()方法來攔截url的原因。 如果您不熟悉Spring表達(dá)式語言,則可以首先通過Spring Master Class進(jìn)行學(xué)習(xí)。
3) <intercept-url pattern="/**" access="isAuthenticated()" />表示所有URL都需要認(rèn)證,并且它們將使用HTTP基本認(rèn)證機(jī)制。
4)身份驗(yàn)證管理器不是重點(diǎn),但在這里我們使用的是內(nèi)存中身份驗(yàn)證提供程序,其中僅配置了一個(gè)用戶,用戶名為"userId" ,密碼為"passwd" 。
我們還可以使用Java配置啟用相同的HTTP基本身份驗(yàn)證,讓我們看看。
如何在Spring Security中使用Java配置啟用Http Basic身份驗(yàn)證
如果是Java配置,則可以配置調(diào)用方法的安全性,如下所示。 使用Java配置啟用HTTP Basic身份驗(yàn)證就像調(diào)用
httpBasic()對(duì)象上的httpBasic configure()方法傳遞給configure()方法。
這是啟用HTTP基本身份驗(yàn)證代碼的Spring Security配置的典型示例:
@Configuration @EnableWebSecurity public class HttpBasicAuthenticationAdapter extendsWebSecurityConfigurerAdapter {@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth)throws Exception {auth.inMemoryAuthentication().withUser("userId").password("passwd").authorities("ROLE_USER");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/securityNone").permitAll().anyRequest().authenticated().and().httpBasic().realmName("Your App");}}您可以使用諸如and()類的聯(lián)接器方法來組合安全約束。 如果要關(guān)閉HTTP基本身份驗(yàn)證,只需刪除對(duì)httpBasic()方法的調(diào)用即可。
順便說一句,HTTP基本身份驗(yàn)證不是最安全的身份驗(yàn)證方法,因?yàn)槟揽梢酝ㄟ^攔截流量和使用Base64算法來解碼密碼,但是它可以滿足大多數(shù)常見需求(例如測(cè)試)。
有更好的方法可以在生產(chǎn)或真實(shí)世界的RESTful Web服務(wù)中執(zhí)行身份驗(yàn)證,例如摘要身份驗(yàn)證。 我將在以后的文章中寫更多有關(guān)此的內(nèi)容,但是如果您迫不及待,那么我建議您通過Eugen Paraschiv的Spring課程學(xué)習(xí)Spring Security MasterClass和REST 。
他分享了他在使用Spring Framework和Spring Security開發(fā)RESTful Web服務(wù)方面的實(shí)際工作經(jīng)驗(yàn)。
無論如何,這是一個(gè)很好的圖表,解釋了HTTP基本身份驗(yàn)證的工作原理,是閱讀本文后記住此概念的一個(gè)很好的圖表:
這就是如何在Spring Security中啟用HTTP基本認(rèn)證 。 您已經(jīng)學(xué)習(xí)了XML和Java配置,以使用Spring安全性啟用Http基本認(rèn)證。 就像我說的那樣,如果您正在使用Spring MVC開發(fā)RESTful Web服務(wù),那么您需要了解如何通過使用Java代碼或XML配置來啟用HTTP基本身份驗(yàn)證以及其工作方式。 即使不利于生產(chǎn),它對(duì)于測(cè)試和質(zhì)量檢查目的也非常有幫助。
您可能想探索的其他Spring Security文章和資源
學(xué)習(xí)Spring Security 4 Basic動(dòng)手
學(xué)習(xí)Spring Security 4中級(jí)–動(dòng)手
Spring MVC中@RestController和@Controller之間的區(qū)別?
Spring中@ Service,@ Component和@Controller之間的區(qū)別?
Spring中@RequestParam和@PathVaraible之間的區(qū)別?
5門學(xué)習(xí)Spring Core,Spring MVC和Spring Boot的課程
3個(gè)在線課程,可以更好地學(xué)習(xí)Spring Security
如何使用Spring Security進(jìn)行基于角色的訪問控制
感謝您到目前為止閱讀本文,如果您喜歡本文以及我對(duì)如何在Spring Security中啟用HTTP基本身份驗(yàn)證的解釋,請(qǐng)與您的朋友和同事分享。
翻譯自: https://www.javacodegeeks.com/2018/01/enable-http-basic-authentication-spring-security-using-java-xml-config.html
總結(jié)
以上是生活随笔為你收集整理的如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思科网络技术学院2002年会(上)(转)
- 下一篇: java文件和xml文件_用Java分割