gpt4 book ai didi

php - 如何使用 PHP 取消对 Windows Auth 用户的身份验证

转载 作者:可可西里 更新时间:2023-11-01 10:38:54 25 4
gpt4 key购买 nike

如果用户使用 Windows 身份验证登录到我的站点,我该如何注销此人以便他们必须再次进行身份验证? (这是与 IIS 一起使用的)

例如用户这样登录:

auth

然后 $_SERVER 变量包含:

[REMOTE_ADDR] => 172.34.567.891
[REMOTE_HOST] => 172.34.567.891
[REMOTE_PORT] => 44601
[REMOTE_USER] => DOMAIN\username

除非计算机重新启动,或者用户使用不同的浏览器,否则不会再次要求用户使用 Windows 身份验证提供用户名或密码。

如何强制使用 PHP 再次对用户进行身份验证?


更新:

我找到了一种方法来做到这一点,但它只适用于 chrome(所有其他浏览器只会抛出 401 未授权,即使登录正确):

我的代码:

logout.php

    //clear session
//then:
$user = isset($_SESSION['userName']);
$userNotSet = (!$user || (is_array($user) && count($user) == 0));


if(!isset($_SESSION['401']) && $userNotSet) {
$_SESSION['401'] = true;
$realm = 'mysite';
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Digest realm="'.$realm.
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');
exit;
}
elseif($userNotSet) {
header('HTTP/1.1 401 Unauthorized');
list($domain, $user) = explode("\\", $_SERVER['REMOTE_USER']);
$_SESSION['userName'] = $user;
$_SESSION['LoggedIn'] = true;
}
else {
header('Location: '.WEBROOT.INDEX);
}
exit;

为什么这在 Chrome 之外的任何其他浏览器中都不起作用?有跨浏览器的解决方案吗?

最佳答案

如果您使用带有 HTTP Basic Auth 的 PHP,那么您需要使用和测试两个 $_SERVER 变量:$_SERVER['PHP_AUTH_USER'] & $_SERVER['PHP_AUTH_PW']

要强制显示浏览器的 HTTP 基本身份验证登录对话框,请发送 401 header 。用户是否登录并不重要,您可以随时发送 401 header 以强制用户重新输入其凭据。

这段代码展示了基础知识:

<?php

// If the force_login request variable exists, then we want the user to
// re-enter their login details.
if (isset($_GET['force_login']) && $_GET['force_login'] == 1) {
header('WWW-Authenticate: Basic realm="realm"');
header('HTTP/1.0 401 Unauthorized');
exit;
}

// Login process
if (!$_SERVER['PHP_AUTH_USER']) {
// The browser has not supplied $_SERVER['PHP_AUTH_USER'], so we need
// the user to log in
header('WWW-Authenticate: Basic realm="realm"');
header('HTTP/1.0 401 Unauthorized');
exit;

} else {
// Test that the username/password combination are correct
$expectedUsername = 'test';
$expectedPassword = '1234';
if ($_SERVER['PHP_AUTH_USER'] != $expectedUsername
&& $_SERVER['PHP_AUTH_PW'] != $expectedPassword ) {
// not valid username/password - try again!
header('WWW-Authenticate: Basic realm="realm"');
header('HTTP/1.0 401 Unauthorized');
exit;
}
}
// End login process


// The user is logged in here. we can display the page content
echo '<a href="?force_login=1">Force login</a>';

(附带说明,如果您使用的是 HTTP 基本身份验证,请确保您也使用 SSL!)

关于php - 如何使用 PHP 取消对 Windows Auth 用户的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10000014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com