gpt4 book ai didi

php - 使用 Active Directory 对 Intranet 站点上的用户进行身份验证

转载 作者:IT王子 更新时间:2023-10-29 01:19:13 25 4
gpt4 key购买 nike

我有一个我建立的“内部网”站点,它有自己的登录系统(用户注册为新用户,并使用其上的用户名/密码登录站点)。但是,现在我想扩展它,让内部网站使用现有的 ActiveDirectory 进行身份验证。这就是我正在寻找的,向前看 -

当用户访问此 Intranet 站点 (http://intranetsite/mySite) 时,将针对 Active Directory 验证用户的域凭据,如果用户的凭据与 AD 匹配,则用户展示了内部网站的主页。

我是 AD 的新手,不知道如何进行此配置。我的内部网站是围绕 PHP 构建的,并在应用程序服务器上使用 Apache; AD 在不同的 IIS 服务器上。

我需要什么信息,我应该把这些信息放在哪里(放在我的站点?htaccess?其他任何地方?)以便我可以使用 AD 身份验证?仅“配置”就足够了吗,还是我需要为此身份验证编写明确的 PHP 代码?

非常感谢任何指点。

最佳答案

如果您只寻找身份验证而不寻找其他任何东西,您可能只需要几行代码就可以了。

首先,确保您有 ldap enabled在你的 php 中。

这是纯 PHP 实现:
(请注意,以这种方式执行时,您应该确保您确实拥有用户的用户名和密码 - 对于 AD,匿名绑定(bind)几乎总是返回 true)

$link = ldap_connect('domain.com'); // Your domain or domain server

if(! $link) {
// Could not connect to server - handle error appropriately
}

ldap_set_option($link, LDAP_OPT_PROTOCOL_VERSION, 3); // Recommended for AD

// Now try to authenticate with credentials provided by user
if (! ldap_bind($link, 'username@domain.com', 'SomeSecret')) {
// Invalid credentials! Handle error appropriately
}
// Bind was successful - continue

如果您希望使用 Active Directory 做更多有趣的事情,例如提取有关当前登录用户的一些信息,我强烈建议您使用一个框架来为您完成繁重的工作。如前所述,adLDAP 是一个不错的选择,如果您运行 PHP 5.4,我敢推荐 AD-X我积极开发的库(您可以通过 Composer 安装它)。

借助 AD-X 库,您可以使用以下代码验证用户的凭据:

try {
$link = new ADX\Core\Link('domain.com'); // Establish connection to AD
$link->bind('username@domain.com', 'SomeSecret'); // Authenticate user
}
catch (ADX\Core\ServerUnreachableException $e) {
// Unable to connect to server, handle error
}
catch (ADX\Core\InvalidCredentialsException $e) {
// Invalid credentials supplied
}
catch (Exception $e) {
// Something else happened, check the exception and handle appropriately
}

// Successfully authenticated if no exception has been thrown

请随意选择最适合您的。但是,如果您希望做的不仅仅是身份验证,我强烈建议您使用一个库来完成 ldap 工作 - 它会为您节省大量时间,并且当事情没有像您期望的那样工作时,您可能会感到沮丧。

此外,如果您对可以/应该使用哪些信息进行连接和身份验证有疑问,请随时查看我的 previous answer关于这个话题。

关于php - 使用 Active Directory 对 Intranet 站点上的用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773643/

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