ADFS(Active Directory Federation Services)是什么?

我听说我们的PHP应用程序可能需要支持使用ADFS进行身份验证。

1. 对于非微软人员来说,ADFS是什么?
2. 它与LDAP等东西有何不同?
3. 它是如何工作的?典型的向ADFS服务器发送请求中会包含哪些信息?它旨在进行身份验证和授权吗?
4. ADFS服务器通常可以从互联网访问(而企业的AD域控制器则不能)吗?

我尝试阅读了一些Technet文档,但它充斥着对微软的说法,对我来说并没有太大帮助。
维基百科更好一些(见下文),但或许ServerFault社区的一些成员可以填补一些空白。
Active Directory Federation Services (ADFS) 是由微软开发的一款软件组件,可安装在 Windows Server 操作系统上,为用户提供跨组织边界访问系统和应用程序的单点登录功能。它使用基于声明的访问控制授权模型来维护应用程序安全性并实现联合身份验证。
基于声明的身份验证是根据包含在受信任令牌中的有关用户身份的一组声明对用户进行身份验证的过程。
在 ADFS 中,通过在两个安全领域之间建立信任来建立两个组织之间的身份联合。一个联合服务器(帐户方)通过 Active Directory 域服务中的标准方式对用户进行身份验证,然后发放一个包含有关用户的一系列声明(包括其身份)的令牌。在资源方(Resources side),另一个联合服务器验证令牌并为本地服务器发放另一个令牌以接受所声明的身份。这使得系统能够向属于另一个安全领域的用户提供对其资源或服务的受控访问,而无需用户直接对系统进行身份验证,也无需两个系统共享用户身份或密码数据库。
在实际操作中,用户通常会这样感知该方法:
1. 用户登录他们的本地计算机(通常是早上开始工作时)。 2. 用户需要获取合作伙伴公司的外联网站上的信息,例如获取定价或产品详情。 3. 用户导航到合作伙伴公司的外联网站,例如:http://example.com。 4. 现在合作伙伴网站不再需要输入任何密码,而是使用 AD FS 将用户凭据传递给合作伙伴外联网站。 5. 用户现在已登录合作伙伴网站,并可以与该网站进行交互。
来源:https://en.wikipedia.org/wiki/Active_Directory_Federation_Services

我发现这些文章和这个视频对提供概述非常有帮助。 - Simon East
Reaces提供了一个很好的答案。我唯一要补充的额外信息是,了解WS-Federation协议安全断言标记语言(SAML)可能会有所帮助,这些是ADFS实施的标准。以下是我在理解这些(相当复杂的)概念时发现有用的一些视频。不幸的是,它们包含了太多的内容,无法在此处列出。视频缩略图 理解SAML和单点登录101 在YouTube上观看 [![视频缩略图](http - Simon East
我也曾经对ADFS感到困惑。我需要从最基础的概念开始解释(因为我不是一个AD专业人士)。这个视频系列中包含的视频对我非常有帮助。对于任何对ADFS毫无经验的新手来说,这是一个很好的起点,然后可以继续观看系列中的其他视频。希望对你有所帮助。https://www.youtube.com/watch?v=Z1uDphoK0BI&index=1&list=PL1l78n6W8zyon7NlRbmvhiTcWQL-QBkmK - Mauricio Zaragoza
2抱歉大家,一位版主刪除了我的答案,其中包含有用的視頻,並將其變成了上方的評論,但現在已經無效了。令人沮喪。 - Simon East
1个回答

对于一个非微软人员来说,ADFS是什么?
ADFS是微软提供的用于单点登录和基于Web的身份验证的解决方案。
它主要用于提供一组可以访问各种站点的凭据,这些站点不一定托管在同一个域内。
它与LDAP等技术有何区别?
LDAP:
- 使用TCP/UDP在389端口进行通信(或者在LDAPS中使用636端口) - 包含用于搜索/检索/添加/删除/修改用户、配置文件和其他目录条目的命令 - 不能直接由Web浏览器执行,但可以使用诸如Apache的mod_authnz_ldap将HTTP身份验证转换为LDAP - 在用于第三方网站身份验证时,需要向第三方提供用户名和密码,这对于安全性来说并不理想 - 是一种更开放的标准,并且有许多Linux实现
ADFS:
更适合网络设计,因为它通过标准的HTTPS进行通信。 遵循一种更安全的流程,类似于OAuth(但不完全相同),其中原始的用户名/密码直接提供给组织的ADFS服务器(或代理,但不是第三方),如果有效,则返回一个用于访问第三方网站的唯一令牌。 虽然它确实使用了一些开放标准(如HTTPS、SAML等),但它是特定于Microsoft的,并且需要运行在Windows服务器上的Internet Information Services(IIS)。 有关此主题的详细信息,请参阅this answer
它的工作方式是通过一个托管ADFS/ADFS代理服务器的单个站点(站点A)来实现,该站点可以访问凭据(通常通过与Active Directory域控制器通信获取)。然后,它在其他需要通过ADFS进行身份验证的站点之间建立了信任关系(站点B和C)。
当用户尝试在浏览器中访问站点B时,该站点会将用户重定向到ADFS代理网站(站点A),要求用户输入用户名和密码进行身份验证,然后返回一组用于记住用户的Cookie,并将用户带回站点B,同时附带一个访问令牌。
如果用户随后尝试访问站点C,他们也会被重定向到ADFS代理网站进行身份验证。如果正确的Cookie存在,用户将无需再次输入密码,而是立即被重定向回站点C并获得一个令牌。
为了授权目的,ADFS可以配置特定的声明(或权限)给用户。因此,它可以扮演两种角色。(请注意身份验证和授权之间的区别。)
有些人更喜欢不将其用于授权,而是将权限管理留在第三方网站中。明显的缺点是站点A和B都需要跟踪用户账户,而在ADFS处理两者的情况下,只有ADFS需要知道用户信息。

ADFS服务器通常可以从互联网访问(而企业AD域控制器则不能)。这是常见情况吗?

是的,几乎总是这样。ADFS基于它主要用于网站身份验证的概念,并围绕IIS构建。
ADFS代理站点通常可以从互联网访问。然而,ADFS本身不可访问。ADFS通常是与ADFS代理分开的独立服务器。
- ADFS服务器 连接到凭据的服务器,具有声明配置和信任。通常不对公众开放。
- ADFS代理服务器 托管具有需要身份验证的网站的登录页面的IIS实例的服务器。在需要身份验证时与ADFS进行通信。通常对公众开放。

12澄清一下:ADFS代理服务器必须在IIS(Windows)上运行。然而,客户网站(B和C)可以运行任何操作系统和Web服务器,包括Linux。 - Olli
非常有帮助,我刚刚创建了一个账户来点赞这个。 - chesscov77
扩展@Reaces的回答,Windows Server 2016上的ADFS 4.0完全支持OAuth/OpenId Connect。 - Mohammad Reza Sadreddini
@MohammadRezaSadreddini 欢迎随意编辑答案以进一步拓展。 - Reaces