認(rèn)證概念:
服務(wù)器需要通過某種方式來了解用戶的身份,一旦服務(wù)器知道了用戶的身份,就可以判定用戶可以訪問事務(wù)和資源了;通常通過用戶名和密碼;
HTTP認(rèn)證模型:
HTTP的兩個(gè)官方的認(rèn)證協(xié)議:基本認(rèn)證和摘要認(rèn)證
認(rèn)證的四個(gè)步驟:
請(qǐng)求: 客戶端發(fā)起一條請(qǐng)求;第一條請(qǐng)求沒有認(rèn)證消息;
質(zhì)詢: 服務(wù)器對(duì)客戶端進(jìn)行質(zhì)詢;返回一條401 Unauthorized響應(yīng),并在www-Authenticate首部說明如何以及在哪里進(jìn)行認(rèn)證;一般指定對(duì)哪個(gè)安全域進(jìn)行認(rèn)證;
授權(quán):客戶端收到401質(zhì)詢,彈出對(duì)話框,詢問用戶名和密碼,用戶輸入用戶名和密碼后,客戶端會(huì)用一個(gè)冒號(hào)將其連接起來,編碼成“經(jīng)過擾碼的”Base-64表示形式,然后將其放在Authorization首部中回送;
成功: 服務(wù)器對(duì)用戶名和密碼進(jìn)行解碼,驗(yàn)證它們的正確性,然后用一條HTTP 200 OK報(bào)文返回所請(qǐng)求的報(bào)文;
基本認(rèn)證的安全缺陷:
這個(gè)基礎(chǔ)認(rèn)證并不安全,因?yàn)槊看蝹鬏敹紩?huì)帶上認(rèn)證信息,并且是明文的(BASE64是編碼,不是加密),因此密碼等信息可能會(huì)被嗅探器發(fā)現(xiàn)。
使用SSL加密信道;使用摘要認(rèn)證;
IIS開啟基礎(chǔ)HTTP認(rèn)證
Tomcat開啟基礎(chǔ)認(rèn)證:
在web.xml里,添加以下配置:
<security-constraint>
<web-resource-collection>
<web-resource-name>protected Resource</web-resource-name>
<url-pattern>/BasicVerify/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>test100</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Default</realm-name>
</login-config>
訪問某個(gè)地址(http://localhost:5566/projectname/BasicVerify/test)時(shí),彈出對(duì)話框。
tomcat里本身有個(gè)tomcat-users.xml,所以用戶名密碼啥的,在這個(gè)文件里配置。
<tomcat-users>
<role rolename="test100"/>
<user username="test123" password="test123" roles="test100"/>
</tomcat-users>
通過role-name,實(shí)現(xiàn)web.xml和tomcat-users.xml里的關(guān)聯(lián)。
登錄成功后頁面顯示如下內(nèi)容,最下方是解碼后的用戶名和密碼。
accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
accept-language: zh-Hans-CN,zh-Hans;q=0.8,en-US;q=0.5,en;q=0.3
user-agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3)
accept-encoding: gzip, deflate
host: 192.168.0.41:8080
connection: Keep-Alive
cookie: JSESSIONID=6AE4989CC03AD16468D2686A717FAE97; jhsessionId=EE8026D614FD04F8CC825E35230DE7CB
authorization: Basic dG9tY2F0OnRvbWNhdA==
--------------------------------------------------------------------------------
tomcat:tomcat
抓包
在chrome里抓不到包,要使用wireshark或者fiddler。
這是使用fiddler抓到的request包:
response包,可以看到頭部是一個(gè)401:
在response的body里是一個(gè)401頁面,但是沒有顯示在瀏覽器中:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>401 Unauthorized</title>
<style type="text/css">
<!--
BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;font-size:12px;}
H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}
PRE, TT {border: 1px dotted #525D76}
A {color : black;}A.name {color : black;}
-->
</style>
</head>
參考: http://www.lxweimin.com/p/3e2d8ad24fec
https://blog.csdn.net/u014006264/article/details/46813925
https://blog.csdn.net/hnzmdpan/article/details/77941616
https://blog.csdn.net/kongxx/article/details/50911018