2011-01-31 13 views
5

スターター;私はコーディングでそれほど知識がありません。基本認証が必要なダイアログ

私は、特定のディレクトリやサイトでBasic/Standardの "Authentication Required"ダイアログをトリガ/スローする方法や、ユーザがそこに入力して別のディレクトリやサイトと照合するための認証情報別のウェブサイトにあるデータベースです。

つまり、「msnでブロックしたユーザーを確認する」Webサイトでは、Webサイトからユーザーの資格情報を取得し、Hotmailデータベースまたはサーバーをチェックし、資格情報が間違っている(再試行する)か、管理者によって実装された特定のWebサイトにリダイレクトされます。

また、資格情報が正しいかどうかをチェックするときに、これらの資格情報を特定の.txtファイルまたはフォルダに格納するスクリプトを作成するにはどうすればいいですか?

唯一の違いは、基本認証ダイアログにすることです。Like This Example Hereしかし、これを自分のサイトに実装したいと思います。

私は理解しやすいと思います。

ありがとうございます。

+1

...リクエストをデコードするために...ユーザー名/パスワードダイアログを表示するには...

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

を除外されています。しかし、これを実装する簡単な方法は、Webサーバーの設定を経由する方法です。プログラミングに関する質問ではなく、IMO。 –

+0

あなたはHTTP認証を参照していますか?どのサーバーを使用していますか? apache? – Meitham

答えて

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サーバでも同等の機能を見つけることができると確信しています。

+0

すばらしいですが、401を送った後、資格情報が記入されていると、別のウェブサイトやサーバーにあるデータベースに対してそれらをチェックする方法と、正しいことをチェックした後に(次の私が逃した)特定のファイルは、.txtファイルまたはフォルダを言うことができますか? – Heath

1

のJava輸入はあなたが理解しやすいです

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; 
}