因此我被告知我们的 PHP 应用程序可能需要支持使用 ADFS 进行身份验证。
对于非 Microsoft 用户来说,ADFS 是什么?
它与 LDAP 之类的东西有何不同?
它是如何工作的?对 ADFS 服务器的典型请求中会包含哪些信息?它是为身份验证和授权而设计的吗?
ADFS 服务器通常可以通过互联网访问吗(而企业 AD 域控制器则不能)?
我尝试阅读一些 Technet 文档,但是它充满了没有多大帮助的微软语言。
维基百科更好(见下文),但也许 ServerFault 社区的某些成员可以填补一些空白。
Active Directory 联合身份验证服务 (ADFS)是微软开发的一款软件组件,可安装在 Windows Server 操作系统上,为用户提供跨组织边界系统和应用程序的单点登录访问。它使用基于声明的访问控制授权模型来维护应用程序安全并实现联合身份。
基于声明的身份验证是根据受信任令牌中包含的一组有关用户身份的声明来对用户进行身份验证的过程。
在 ADFS 中,通过在两个安全领域之间建立信任,在两个组织之间建立身份联合。一方(帐户方)的联合服务器通过 Active Directory 域服务中的标准方式对用户进行身份验证,然后发出一个令牌,其中包含一系列有关用户的声明,包括其身份。在另一方,即资源方,另一个联合服务器验证该令牌并发出另一个令牌,以便本地服务器接受声明的身份。这允许系统向属于另一个安全领域的用户提供对其资源或服务的受控访问,而无需用户直接向系统进行身份验证,也不需要两个系统共享用户身份或密码的数据库。
在实践中,用户通常会这样看待这种方法:
- 用户登录本地电脑(就像他们早上开始工作时通常做的那样)
- 用户需要在合作伙伴公司的外联网网站上获取信息 - 例如获取定价或产品详细信息
- 用户导航到合作伙伴公司外联网网站 - 例如:http://example.com
- 合作伙伴网站现在不需要输入任何密码 - 相反,用户凭据会使用 AD FS 传递到合作伙伴外联网网站
- 用户现在已登录合作伙伴网站,并可以“登录”与网站进行交互
从https://en.wikipedia.org/wiki/Active_Directory_Federation_Services
答案1
对于非 Microsoft 用户来说,ADFS 是什么?
ADFS 是 Microsoft 的单点登录和基于 Web 的身份验证解决方案。
它主要用于提供一组可访问不一定托管在同一域内的各种站点的凭证。
它与 LDAP 之类的东西有何不同?
LDAP:
- 使用端口 389 上的 TCP/UDP 进行通信(对于 LDAPS,则使用端口 636)
- 包含搜索/检索/添加/删除/修改用户、配置文件和其他目录条目的命令
- 能不是可以通过 Web 浏览器直接执行,但是可以使用 Apache 之类的工具将 HTTP 身份验证转换为 LDAP
mod_authnz_ldap
。 - 用于第三方网站认证时,需要向第三方提供用户名和密码,安全性不太理想。
- 更像是一个开放标准,并且有许多 Linux 实现。
ADFS:
- 通过标准 HTTPS 进行通信,更适合 Web 设计
- 遵循与 OAuth 类似(但不完全相同)的更安全的过程,其中原始用户名/密码直接提供给组织的 ADFS 服务器(或代理,但不是我们使用一个令牌来访问第三方网站(即,通过该令牌我们可以访问第三方网站),如果该令牌有效,则返回一个唯一的令牌,该令牌可用于访问第三方网站。
- 虽然它确实使用了一些开放标准(HTTPS、SAML 等),但它是 Microsoft 专用的,并且需要仅在 Windows 服务器上运行的 Internet 信息服务 (IIS)。
也可以看看这个答案就此主题而言。
它是如何工作的?对 ADFS 服务器的典型请求中会包含哪些信息?它是为身份验证和授权而设计的吗?
它的工作原理是让一个站点(站点 A)托管 ADFS / ADFS 代理服务器,该服务器可以访问凭据(通常通过与 Active Directory 域控制器通信)。然后,它会在需要通过 ADFS 进行身份验证的其他站点(站点 B 和 C)之间建立信任。
当用户尝试在其浏览器中访问站点 B 时,该站点会将用户重定向到 ADFS 代理网站(站点 A),该网站会要求用户输入用户名和密码,对其进行身份验证,返回一组 cookie 以记住他们,然后将他们重定向回站点 B,同时提供访问令牌。
如果用户随后尝试访问站点 C,他们也会被重定向到站点 A 进行来自 ADFS 代理网站的身份验证。如果存在正确的 cookie,则用户无需再次输入密码,而是立即使用令牌重定向回站点 C。
可以为用户配置 ADFS 的特定声明(或权限),以用于授权目的。因此它可以同时充当两个角色。(注意身份验证和授权之间的区别。
有些人不喜欢使用它进行授权,而是将权限管理保留在第三方网站中。明显的缺点是站点 A 和 B 都需要跟踪用户帐户,而在 ADFS 处理两者的场景中,只有 ADFS 需要知道用户。
ADFS 服务器通常可以通过互联网访问吗(而企业 AD 域控制器则不能)?
是的,几乎总是如此。ADFS 基于主要用于网站身份验证的概念。并且是围绕 IIS 构建的。
ADFS 代理站点通常可以通过互联网访问。但是 ADFS 本身却不能。ADFS 通常是独立于 ADFS 代理的服务器。
- ADFS 服务器
链接到凭证的服务器,具有声明配置和信任。通常不可公开访问。 - ADFS 代理服务器
托管 IIS 实例的服务器,该实例具有需要身份验证的网站的登录页面。需要身份验证时与 ADFS 通信。通常可公开访问。