2011-01-31 61 views
5

初學者;我在編碼方面不太聰明。需要基本認證對話框

我對如何在特定目錄或網站上觸發/或拋出基本/標準「需要身份驗證」對話框的腳本以及用戶輸入的憑據相當感興趣數據庫在另一個網站上。

ie就像那些「檢查誰在MSN上阻止了你」網站一樣,他們從他們的網站獲取了憑據,他們檢查Hotmail數據庫或服務器,並告訴你憑據是不正確的(再試一次)還是正確將您重定向到由管理員實施的特定網站。 (在這種情況下Hotmail聯繫人列表)

而且當它檢查憑據是否正確時,我該如何使腳本將這些憑據存儲到特定的.txt文件或文件夾中?

唯一的區別是,我只是希望它是基本身份驗證對話框Like This Example Here但我希望這在我的網站上實現。

我希望我能理解。

非常感謝您提前。

+1

你是可以理解的。但實現這一點的簡單方法是通過您的網絡服務器配置。不是編程問題,IMO。 – 2011-01-31 01:26:51

+0

你指的是HTTP認證?你在用什麼服務器?阿帕奇? – Meitham 2011-01-31 01:28:26

回答

3

您需要向瀏覽器發送401響應代碼,以便瀏覽器提示輸入用戶名和密碼。下面是來自PHP manual採取PHP的例子:

<?php 
if (!isset($_SERVER['PHP_AUTH_USER'])) { 
    header('WWW-Authenticate: Basic realm="My Realm"'); 
    header('HTTP/1.0 401 Unauthorized'); 
    echo 'Text to send if user hits Cancel button'; 
    exit; 
} else { 
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"; 
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"; 
} 
?> 

你應該能夠做同樣的事情在你所選擇的語言,雖然你將需要研究其中的用戶名和密碼變量存儲在語言你用。

作爲一種替代方案,您也可以在Web服務器中對其進行配置。這樣Web服務器就可以處理認證,並且只需要對應用程序進行編程即可獲取通常在「REMOTE_USER」環境變量中找到的當前用戶名。在Apache中可以按照以下方式限制訪問特定的文件夾:

<Directory /usr/local/apache/htdocs/secret> 
    AuthType Basic 
    AuthName "Restricted Files" 
    # (Following line optional) 
    AuthBasicProvider file 
    AuthUserFile /usr/local/apache/passwd/passwords 
    Require user rbowen 
</Directory> 

更多信息,請參見Apache documentation on authentication and access control。即使您使用的是不同的Web服務器,也請放心,這是Web服務器的常見功能。我相信你可以在你使用的任何Web服務器上找到相應的功能。

1

Java的進口已被排除......

要顯示的用戶名/密碼對話框......

HttpServletResponse httpResponse = (HttpServletResponse) response; 
httpResponse.setHeader("WWW-Authenticate", "Basic realm=\"My Realm\""); 
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, ""); 

要解碼的請求......

private boolean authenticateRequestOk(HttpServletRequest request) 
{ 
    String authorizationHeader = request.getHeader("Authorization"); 

    if (authorizationHeader != null) 
    { 
     byte[] decodedUsernamePassword; 
     try 
     { 
      decodedUsernamePassword = Base64.decode(authorizationHeader.substring("Basic ".length())); 
     } 
     catch (IOException e) 
     { 
      log.error("Error decoding authorization header \"" + authorizationHeader + "\"", e); 
      return false; 
     } 

     String usernameAndPassword = new String(decodedUsernamePassword); 

     String username = StringUtils.substringBefore(usernameAndPassword, ":"); 
     String password = StringUtils.substringAfter(usernameAndPassword, ":"); 

     if (USERNAME.equalsIgnoreCase(username) && PASSWORD.equalsIgnoreCase(password)) 
     { 
      return true; 
     } 
    } 

    return false; 
}