首先;我在编码时不那么有文化。
我对如何在特定目录或站点上触发/或抛出基本/标准“需要身份验证”对话框以及用户将在其中输入的凭据的脚本非常感兴趣,以便针对另一个数据库进行检查那是在另一个网站上的。
即。就像那些“检查谁阻止你在msn”网站上那些他们从他们的网站获得你的凭据,他们检查Hotmail数据库或服务器并告诉你凭据是否不正确(再试一次)或如果它是正确的,它会将你重定向到特定的由管理员实施的网站。 (在这种情况下Hotmail联系人列表)
此外,当它检查凭据是否正确时,如何让脚本将这些凭据存储到特定的.txt文件或文件夹中?!
唯一的区别是我只想让它成为基本身份验证对话Like This Example Here但我想在我的网站上实现它。
我希望我能理解。
非常感谢你。
答案 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;
}