使用PHP和LDAP连接到Microsoft Office 365

4
我工作的公司已将本地交换迁移到托管的Office 365解决方案。我们正在建设几个外部(对于我们的本地网络而言)托管的网站,并希望使用LDAP身份验证来建立我们现有的托管用户群基础之上。
有人能否解释或指向一些文档,介绍如何使用PHP和LDAP连接到远程托管的AD(在这种情况下是Office 365),并对其进行用户身份验证?
感谢您的时间和努力。

我非常希望远程目录不能直接通过互联网访问。你是否已经设置了VPN连接到远程数据中心或其他什么方式? - DaveRandom
嘿,戴夫,我想我没有表达清楚。我能找到的所有PHP/LDAP示例都是在与DC相同的服务器上的PHP脚本。我感兴趣的是从Web主机使用PHP/LDAP连接到托管在Microsoft的Office 365中,并针对用户凭据进行身份验证。 - Josh Ripley
是的,我非常确定这是不可能的。我绝不是Office 365方面的专家(事实上相反),但是从那个层面抽象出来,微软开放LDAP服务器对公共互联网来说是一个巨大的安全风险。如果他们允许这样做,我会非常惊讶。 - DaveRandom
2个回答

4
这是可能的。微软最近发布了Windows Azure云平台的开发者预览版,它类似于许多其他云计算服务(AmazonPagoda BoxHeroku)。随着这个新产品的推出,开发的应用程序可以利用您的Office365帐户凭据来使用单点登录功能。
以下是一些介绍PHP过程的文章:
  1. 如何使用Windows Azure Active Directory实现单点登录-PHP应用程序
  2. 开始使用Windows Azure Active Directory
注意事项:
  • 例子一的源代码来自一个git仓库。这个仓库中没有包含引用的.csproj文件,因此你需要使用包含的3个源文件构建项目。如果我能做到,你也能做到:)。
  • 还应该注意,在Office365身份验证完成并重新路由回您的应用程序之后,它期望返回URL是HTTPS,如果不是,则会出现错误(或者至少我是这样的)。

以上链接是404错误;链接详细介绍并扩展了原始内容。 - jaytho

-2

我使用 PHP 完成了 LDAP 认证和其他事情,这是基本的认证,请确保在尝试进行认证时 DN 正确。

      define("LDAPSERVER","192.168.0.1"); // your server
      define("LDAPBINDDN","cn=Worker,dc=mlonline,");
      define("LDAPBINDPW","FakePassword");


        $ds=ldap_connect(LDAPSERVER);
        if($ds){
            try{
                    $bind=ldap_bind($ds,LDAPBINDDN,LDAPBINDPW);
                    if($bind){
                            //yeah authenticated
                    }else{
                        throw new Exception('Cannot Connect to server Authentication Failed');
                    }

            }catch(Exception $e){
                throw $e;
            }
        }else{
           throw new Exception('Server Down');
        }

3
感谢您的回复。看完您的示例后,我的问题是:要连接到Office 365服务器,LDAPSERVER和LDAPBINDDN变量应该如何定义? - Josh Ripley
LDAP服务器是您的服务器或其地址的位置。对于LDAPBINDDN,请阅读http://www.ldapman.org/articles/intro_to_ldap.html,因为您首先需要知道用户在Active Directory中的位置。 - user1415567
2
@user1415567 我也在想"我的服务器"应该是什么。我没有服务器,我使用的是Office365。对于邮件,每个帐户都有一个服务器,位于xyz.mail.protection.outlook.com,而网页则位于xyz.sharepoint.com。但它不可能是其中之一,对吧? - John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接