Требуется базовая аутентификация - PullRequest
5 голосов
/ 31 января 2011

для начинающих; Я не так грамотен в коде.

Мне довольно интересен сценарий о том, как вызывать / или генерировать базовый / стандартный диалог «Требуется аутентификация» в определенном каталоге или сайте, и учетные данные, которые будут вводиться там пользователями, для проверки в другой базе данных. вот на другом сайте.

т.е. Подобно тем веб-сайтам «Проверьте, кто заблокировал вас на MSN», они получают свои учетные данные со своего веб-сайта, проверяют базу данных или серверы Hotmail и сообщают вам, если учетные данные неверны (повторите попытку) или если они верны, они перенаправляют вас на конкретный сайт, который реализуется администратором. (в этой ситуации список контактов Hotmail)

А также, когда он проверяет правильность учетных данных, как мне сделать сценарий для сохранения этих учетных данных в определенном файле .txt или папке?!

Единственное отличие состоит в том, что я просто хочу, чтобы это был диалог обычной аутентификации Как в этом примере здесь Но я хочу, чтобы это реализовывалось на моих сайтах.

Надеюсь, я понятен.

Заранее большое спасибо.

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Вам потребуется отправить код ответа 401 в браузер, чтобы браузер запросил имя пользователя и пароль.Вот пример PHP, взятый из руководства по 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>";
}
?>

Вы должны быть в состоянии сделать то же самое на выбранном вами языке, хотя вам нужно будет исследовать, гдеПеременные имени пользователя и пароля хранятся на языке, который вы используете.

В качестве альтернативы вы также можете настроить это на своем веб-сервере.Таким образом, веб-сервер обрабатывает аутентификацию, и вам нужно только запрограммировать ваше приложение, чтобы получить текущее имя пользователя, которое обычно находится в переменной окружения "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 по аутентификации и управлению доступом для получения дополнительной информации.Даже если вы используете другой веб-сервер, будьте уверены, что это обычная функция на веб-серверах.Я уверен, что вы сможете найти эквивалентную функциональность на любом веб-сервере, который вы используете.

1 голос
/ 01 февраля 2011

Импорт 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;
}
...