HTTP添加Basic認(rèn)證
一個(gè)web站點(diǎn),總會(huì)有一些資源需要保護(hù),比如圖片文件、某些頁面等,使用basic認(rèn)證簡(jiǎn)單方便,易于配置,且完全獨(dú)立于開發(fā)。basic認(rèn)證既可以在web容器上,也可以放到前端服務(wù)器上。
resin配置
basic的resin配置需要在web項(xiàng)目的描述文件web.xml中,通過添加如下內(nèi)容,可以對(duì)指定路徑的資源進(jìn)行保護(hù),所有對(duì)指定資源的訪問,都需要輸入配置的用戶名與密碼,驗(yàn)證通過后才可以正常訪問。
<authenticator type="com.caucho.server.security.XmlAuthenticator">
<init>
<user>user:pass:admin</user>
<password-digest>none</password-digest>
</init>
</authenticator>
<login-config auth-method="basic" />
<security-constraint url-pattern="/admin/**" role-name="admin" />
上面的配置代表當(dāng)用戶訪問以yourapp/admin/開頭的所有資源時(shí),都需要通過basic認(rèn)證(如果之前還沒有通過的話),用戶名是user,密碼是pass。有時(shí)候需要保護(hù)的資源不止一項(xiàng),那么可以用如下的方法配置。
<authenticator type="com.caucho.server.security.XmlAuthenticator">
<init>
<user>user:pass:admin</user>
<password-digest>none</password-digest>
</init>
</authenticator>
<login-config auth-method="basic" />
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/admin/**</url-pattern>
<url-pattern>/manage/**</url-pattern>
</web-resource-collection>
<auth-constraint role-name='admin' />
</security-constraint>
此時(shí)所有以yourapp/admin/或者yourapp/manage/開頭的資源都需要經(jīng)過basic認(rèn)證。
nginx配置
雖然resin的配置也可以達(dá)到效果,但是畢竟是配置到了工程文件中,以后定期更換用戶名與密碼,都得更新項(xiàng)目描述符;而且有個(gè)更要命的問題,如果一個(gè)resin上有多個(gè)項(xiàng)目的話,一次更新就需要修改所有相關(guān)項(xiàng)目的web.xml文件,太麻煩了。在nginx上也可以配置basic認(rèn)證,而且更簡(jiǎn)單。
nginx的http basic認(rèn)證密碼是用crypt(3)加密的,可以試用apache的htpasswd生成密碼文件。首先進(jìn)入apache的安裝目錄,進(jìn)入apache/bin/目錄下,可以看到htpasswd,輸入如下命令生成密碼文件。
htpasswd -c -d pass_file user_name
其中-c表示生成文件,-d表示是以crypt加密,pass_file是密碼文件名,user_name表示basic認(rèn)證的用戶名,回車后會(huì)提示輸入密碼,然后再次輸入確認(rèn),生成密碼文件完成。
然后就是配置nginx,nginx的認(rèn)證需要配置到location下,如下所示。
location ~ /admin/manage {
auth_basic "Auth";
auth_basic_user_file pass_file;
}
其中Auth可以隨意設(shè)置,它只不過是當(dāng)需要認(rèn)證時(shí)彈出窗口的服務(wù)顯示名稱而已,pass_file就是我們之前生成的密碼文件,這里要注意nginx 0.6.7開始,auth_basic_user_file的相對(duì)目錄是nginx_home/conf,以前版本的相對(duì)目錄是nginx_home,現(xiàn)在只要訪問包含/admin/manage路徑的資源都會(huì)彈出認(rèn)證框,而且對(duì)于一個(gè)nginx代理了n個(gè)web服務(wù)的情況,需要更換用戶名與密碼時(shí),只需要將密碼文件替換一次即可,比第一種方式方便可靠了很多。
resin配置
basic的resin配置需要在web項(xiàng)目的描述文件web.xml中,通過添加如下內(nèi)容,可以對(duì)指定路徑的資源進(jìn)行保護(hù),所有對(duì)指定資源的訪問,都需要輸入配置的用戶名與密碼,驗(yàn)證通過后才可以正常訪問。








上面的配置代表當(dāng)用戶訪問以yourapp/admin/開頭的所有資源時(shí),都需要通過basic認(rèn)證(如果之前還沒有通過的話),用戶名是user,密碼是pass。有時(shí)候需要保護(hù)的資源不止一項(xiàng),那么可以用如下的方法配置。















此時(shí)所有以yourapp/admin/或者yourapp/manage/開頭的資源都需要經(jīng)過basic認(rèn)證。
nginx配置
雖然resin的配置也可以達(dá)到效果,但是畢竟是配置到了工程文件中,以后定期更換用戶名與密碼,都得更新項(xiàng)目描述符;而且有個(gè)更要命的問題,如果一個(gè)resin上有多個(gè)項(xiàng)目的話,一次更新就需要修改所有相關(guān)項(xiàng)目的web.xml文件,太麻煩了。在nginx上也可以配置basic認(rèn)證,而且更簡(jiǎn)單。
nginx的http basic認(rèn)證密碼是用crypt(3)加密的,可以試用apache的htpasswd生成密碼文件。首先進(jìn)入apache的安裝目錄,進(jìn)入apache/bin/目錄下,可以看到htpasswd,輸入如下命令生成密碼文件。

其中-c表示生成文件,-d表示是以crypt加密,pass_file是密碼文件名,user_name表示basic認(rèn)證的用戶名,回車后會(huì)提示輸入密碼,然后再次輸入確認(rèn),生成密碼文件完成。
然后就是配置nginx,nginx的認(rèn)證需要配置到location下,如下所示。




其中Auth可以隨意設(shè)置,它只不過是當(dāng)需要認(rèn)證時(shí)彈出窗口的服務(wù)顯示名稱而已,pass_file就是我們之前生成的密碼文件,這里要注意nginx 0.6.7開始,auth_basic_user_file的相對(duì)目錄是nginx_home/conf,以前版本的相對(duì)目錄是nginx_home,現(xiàn)在只要訪問包含/admin/manage路徑的資源都會(huì)彈出認(rèn)證框,而且對(duì)于一個(gè)nginx代理了n個(gè)web服務(wù)的情況,需要更換用戶名與密碼時(shí),只需要將密碼文件替換一次即可,比第一種方式方便可靠了很多。
posted on 2011-02-23 22:41 初一七月 閱讀(4667) 評(píng)論(2) 編輯 收藏 所屬分類: Web