需要基本身份验证对话框

时间:2011-01-31 01:13:22

标签: java basic-authentication required

首先;我在编码时不那么有文化。

我对如何在特定目录或站点上触发/或抛出基本/标准“需要身份验证”对话框以及用户将在其中输入的凭据的脚本非常感兴趣,以便针对另一个数据库进行检查那是在另一个网站上的。

即。就像那些“检查谁阻止你在msn”网站上那些他们从他们的网站获得你的凭据,他们检查Hotmail数据库或服务器并告诉你凭据是否不正确(再试一次)或如果它是正确的,它会将你重定向到特定的由管理员实施的网站。 (在这种情况下Hotmail联系人列表)

此外,当它检查凭据是否正确时,如何让脚本将这些凭据存储到特定的.txt文件或文件夹中?!

唯一的区别是我只想让它成为基本身份验证对话Like This Example Here但我想在我的网站上实现它。

我希望我能理解。

非常感谢你。

2 个答案:

答案 0 :(得分: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 :(得分: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;
}