前言:對於基於http協議的通訊來說,http的安全認證是必不可少的一部分知識。
一、基本認證
基本身份驗證它提供了一個方法來解決這個問題,雖然不是很安全。基本身份驗證,客戶端的每個請求發送Base64編碼憑據,使用HTTP[授權]頭。這意味著每個請求獨立於其他請求和服務器可能/不維護客戶端,這對可擴展性是非常好的。
下面示出的是準備標頭的樣本代碼。
<code>String
plainClientCredentials="myusername:mypassword"
;String
base64ClientCredentials =new
String
(Base64.encodeBase64(plainClientCredentials.getBytes())); HttpHeaders headers = getHeaders(); headers.add("Authorization"
,"Basic "
+ base64ClientCredentials);/<code>
基本身份驗證和Spring Security
有兩個步驟,就可以啟用基本身份驗證在Spring Security配置中。
1. 配置httpBasic : 配置HTTP基本身份驗證。 [基於HTTP的XML]
2. 配置有BasicAuthenticationEntryYiibai認證入口點 : 如果驗證失敗[無效/缺少憑據],這個切入點將被觸發。 這是非常重要的,因為我們不想重定向到身份驗證失敗的登錄頁面[Spring Security的默認行為] ,因為這裡我們沒有一個登錄頁面。
二、什麼是基本認證
1.概念:基本認證是一種用來允許Web瀏覽器或其他客戶端程序在請求時提供用戶名和口令形式的身份憑證的一種登錄驗證方式。
把 "用戶名+冒號+密碼"用BASE64算法加密後的字符串放在http request 中的header Authorization中發送給服務端, 這種方式叫HTTP基本認證(Basic Authentication)
2.優缺點:
HTTP基本認證的優點
HTTP基本認證,簡單明瞭。Rest API 就是經常使用基本認證的。
每次都要進行認證
http協議是無狀態的, 同一個客戶端對 服務器的每個請求都要求認證。
HTTP基本認證和HTTPS
把 "用戶名+冒號+密碼" 用BASE64加密後的string雖然用肉眼看不出來, 但用程序很容易解密,上圖可以看到Fiddler就直接給解密了。 所以這樣的http request在網絡上,如果用HTTP傳輸是很不安全的。 一般都是會用HTTPS傳輸,HTTPS是加密的,,所以比較安全。
三、http認證方式
1.基本認證 Basic
2.摘要認證:Digest
3.Form形式:ajax交互認證。
4.SSL
HTTP基本認證(HTTP Basic authentication)和HTTP摘要認證(HTTP Digest authentication)。
此外常用的還有NTLM、SPNEGO(HTTP協商認證,HTTP Negotiate authentication,是其一種)和Kerberos認證方式
<code>public
final
class
AuthPolicy
{public
static
final
String NTLM ="NTLM"
;public
static
final
String DIGEST ="Digest"
;public
static
final
String BASIC ="Basic"
;public
static
final
String SPNEGO ="negotiate"
;public
static
final
String KERBEROS ="Kerberos"
;private
AuthPolicy
()
{ } }/<code>
四、Spring中實現
1.web.xml中配置過濾器
<code><
filter
><
filter-name
>springSecurityFilterChainfilter-name
><
filter-class
>org.springframework.web.filter.DelegatingFilterProxyfilter-class
>filter
><
filter-mapping
><
filter-name
>springSecurityFilterChainfilter-name
><
url-pattern
>/*url-pattern
>filter-mapping
>/<code>
2.配置spring-security.xml文件:配置攔擊的url和認證的用戶和密碼(加密方式或者不配置)
參考文檔
http://dreamzhong.iteye.com/blog/1134374