一、序言 現在很多網站對用戶的訪問權限進行了嚴格的限制,用戶在訪問某些資源時需要給出“用戶名/口令"來確認自己的身份。目前,使用最多的身份認證方法是將用戶名、口令存放在一個數據庫中,當用戶要訪問某些受限制的資源時,要在某一個頁面中輸入用戶名和口令,程序將用戶輸入的用戶名和口令與數據庫存放的“用戶名/口令"相比較,如果輸入正確,則正常使用資源,否則,資源訪問被拒絕。但是,這種身份認證方式有兩個很大的問題,一方面只要用戶有一次身份認證成功,就可以記錄下受限資源的鏈接地址,在下一次訪問時只需輸入該地址,而無需通過身份認證過程就可訪問受限資源;另一方面用戶可以在受限制的資源的超級鏈接處點右鍵,選擇“屬性",就可以查看到受限制資源的鏈接地址,直接訪問該地址,使身份認證不能達到預期的效果。 Apache可以很好地解決上述問題。Apache是建立WWW網站的軟件,可運行於Linux、 Unix和Windows操作系統下。下面就以Linux為例介紹Apache是如何完成用戶身份認證功能的。 二、基本原理 Apache實現身份認證的基本原理是:當系統管理員啟動身份認證功能後,可以在要限制的目錄中添加一個默認名“.htAccess"的文件。當用戶訪問該路徑下的資源時,系統就會彈出一個對話框,要求用戶輸入“用戶名/口令"。也就是說,它的身份認證功能不是人為由程序控制,而是由系統直接控制的。這樣就避免了用戶記錄需要認證的資源的超級鏈接,不會下次直接訪問資源。 身份認證的方法有多種,其中包括Apache中預編譯好的mod—auth模塊和Apache自帶的但未編譯好的模塊,如:mod—auth—dbm模塊、mod—auth—db模塊、mod—auth—msql模塊。另外還有一些第三方開發的模塊,如:mysql數據庫中使用的mod—auth—MySQL模塊,他們都可以對一組用戶或某個用戶進行限制。 三、具體實現 下面主要介紹mod—auth模塊和mod—auth—MySQL模塊的使用。但無論采取何種認證方式,都要先對Apache做一些設置:在配置文件access.conf中作如下的設置: AccessFileName . htaccess AllOerride All (一) mod—auth模塊完成身份認證功能,它主要是把允許訪問資源的組名、用戶名、用戶口令以文本文件的方式存放,具體方法是: 1.編輯認證用的組文件:主要用於存放可以訪問受限制的資源的組名以及其中的用戶,用Vi編輯組文件.htgroup如下 ptisi : lkch 存放在 /sur/local/apache/secrets/.htgroup路徑下,其中ptisi是組名,lkch是組中的用戶名。 2.建立用戶文件:主要用於存放某一組中的用戶名和口令 htpasswd -c /usr/local/apache/secrets/.htpasswd lkch 注:htpasswd是Apache提供用於實現認證功能的程序,-c表示產生新的.htpasswd文件,如果存在同名舊文件,則覆蓋舊文件。該程序將詢問口令,鍵入“hello"然後重新確認口令。 3.在要限制的資源的目錄內編輯 .htaccess文件 AuthName ″This is a test″ AuthType Basic AuthUserFile /usr/local/apache/secrets/.htpasswd AuthGroupFile /usr/local/apache/secrets/.htgroup repuire group ptisi 注:參數require group 指定哪些組的用戶可以訪問認證資源,這樣,當再次訪問需要認證的資源存在的目錄時,系統就會彈出對話框,要求輸入“用戶名/口令"。 (二)mod—auth—mysql模塊完成身份認證功能,由於Apache + PHP + MySQL已經被許多網站的建設者當作是建設中小型網絡數據庫的黃金組合,因而mod—auth—mysql的功能也就顯得尤其強大。它主要是把允許訪問資源的組名、用戶名、用戶口令以文本文件的方式存放。 1.建立認證用的數據庫 prompt〉mysqladmin create http—auth 2.建立認證用的表,並插入一行數據 prompt〉mysql http—auth mysql〉create table mysql—auth ( -〉sername char(25) NOT NULL, -〉passwd char(25), -〉groups char(25), -〉primary key (usrname) -〉); mysql〉insert mysql—auth (username,passwd,groups) -〉values (″lkch″,PASSWD(″hello″),″ptisi″); 3.配置Apache 在http.cont中加入 Auth—MySQL—Info [host] [username][PassWord] 其中username和password是MySQL數據庫用戶的用戶名和口令。 4.創建 .htaccess文件 AuthName ″This is a test!″ AuthType Basic Auth—MySQL on Auth—MySQL—Db http—auth Auth—MySQL—Password—Table mysql—auth Auth—MySQL—Group—Table mysql—auth Auth—MySQL—Username—Field username Auth—MySQL—Password—Field passwd Auth—MySQL—Group—Field groups Auth—MySQL—Encryption—Types Plaintext,Crypt—DES,MySQL 最後這句話表示認證時口令的形式,分別表示不加密、DES加密方式和MySQL的Password()加密。 使用這種認證方法的最大優點是PHP提供了大量對MySQL數據庫進行操作的函數,可以方便地進行遠程理。