什么是ADFS(Active Directory联合身份validation服务)?

所以我被告知我们的PHP应用程序可能需要支持使用ADFS的身份validation。

  1. 对于一个非微软的人来说,什么是ADFS?

  2. 它与LDAP之类的东西有什么不同?

  3. 它是如何工作的? 在ADFS服务器的典型请求中将包含哪些types的信息? 它是否为authentication和授权而devise?

  4. ADFS服务器通常可以从互联网访问(而公司AD域控制器不会)?

我已经尝试阅读一些Technet文档,但它充满了微软,说这不是很有帮助。

维基百科更好(见下文),但也许一些ServerFault社区可以填补一些空白。

Active Directory联合身份validation服务(ADFS)是由Microsoft开发的一种软件组件,可安装在Windows Server操作系统上,为用户提供跨组织边界的系统和应用程序的单一login访问。 它使用基于声明的访问控制授权模型来维护应用程序安全性并实施联合身份。

基于声明的身份validation是基于关于包含在受信任的令牌中的身份的一组声明来对用户进行身份validation的过程。

在ADFS中,通过build立两个安全领域之间的信任,在两个组织之间build立联合身份。 一侧的联合服务器(帐户侧)通过Active Directory域服务中的标准方法对用户进行身份validation,然后发出包含一系列关于用户的声明(包括其身份)的令牌。 另一方面,资源方面,另一个联邦服务器validation令牌,并为本地服务器发出另一个令牌来接受声明的身份。 这允许系统向属于另一安全领域的用户提供对其资源或服务的受控访问,而不要求用户直接向系统authentication,也不需要两个系统共享用户身份或密码的数据库。

在实践中,这种方法通常被用户认为如下:

  1. 用户login到他们的本地PC(正如他们通常在早上开始工作时那样)
  2. 用户需要获取合作伙伴公司的外联网网站上的信息,例如获取定价或产品详细信息
  3. 用户导航到合作伙伴公司的外部网站 – 例如: http : //example.com
  4. 合作伙伴网站现在不需要键入任何密码,而是使用AD FS将用户凭据传递给合作伙伴Extranet站点
  5. 用户现在login到合作伙伴网站,并可以与网站“login”

从https://en.wikipedia.org/wiki/Active_Directory_Federation_Services

对于一个非微软的人来说,什么是ADFS?

ADFS是微软针对单一login和基于Web的身份validation的解决scheme。

它主要用于提供一组凭据,可以访问不一定托pipe在同一个域中的各种网站。

它与LDAP之类的东西有什么不同?

LDAP:

  • 在端口389上使用TCP / UDP进行通信(或者在端口636上进行LDAPS)
  • 包含search/检索/添加/删除/修改用户,configuration文件和其他目录条目的命令
  • 不能由Web浏览器直接执行,但是使用诸如Apache的mod_authnz_ldap类的东西,可以将HTTPauthentication转换为LDAP。
  • 用于第三方网站身份validation时,要求将用户名和密码提供给第三方,这对安全性来说并不理想。
  • 更多是一个开放的标准,并有许多Linux的实现。

ADFS:

  • 通过标准的HTTPS进行通信,更好地为networkingdevise
  • 遵循一个类似于(但不是确切)的安全stream程,其中原始用户名/密码直接提供给组织的ADFS服务器(或代理服务器,而不是第三方),如果有效,则返回唯一的令牌用于访问第三方网站。
  • 尽pipe它确实使用了一些开放的标准(HTTPS,SAML等),但它是特定于Microsoft的,需要只能在Windows服务器上运行的Internet信息服务(IIS)。

另请参阅这个问题的答案 。

它是如何工作的? ADFS服务器的典型请求中将包含哪些types的信息? 它是否为authentication和授权而devise?

它通过拥有一个承载ADFS / ADFS代理服务器的单个站点(站点A)来工作,该服务器可以访问凭据(通常通过与Active Directory域控制器进行通信)。 然后在需要通过ADFS进行身份validation的其他站点(站点B和C)之间获得信任。

当用户尝试在浏览器中访问站点B时,站点将用户redirect到ADFS代理网站(站点A),该网站要求input用户名和密码,对其进行身份validation,返回一组用于记忆它们的cookie,然后redirect回到站点B,以及访问令牌。

如果用户然后尝试访问站点C,他们也将被redirect到站点A从ADFS代理网站进行身份validation。 如果存在正确的cookie,则用户不需要再次input密码,而是立即通过令牌redirect回站点C.

为了授权目的,ADFS可以为用户configuration特定的声明(或权限)。 所以它可以担任这两个angular色。 (请注意authentication与授权的区别 。)

有些人不喜欢使用它进行授权,而是将权限pipe理保留在第三方网站上。 显而易见的缺点是,站点A和站点B都需要跟踪用户帐户,而在ADFS同时处理的情况下,只有ADFS需要知道用户。

ADFS服务器通常可以从互联网访问(而公司AD域控制器不会)?

是的,几乎总是。 ADFS基于它将主要用于网站身份validation的概念。 并build立在IIS周围。

ADFS代理网站是通常可以从互联网上访问的网站。 但是ADFS本身不是。 ADFS通常是独立于ADFS代理的服务器。

  • ADFS服务器
    链接到凭证的服务器,并具有声明configuration以及信任。 一般不公开。
  • ADFS代理服务器
    承载具有要求身份validation的网站的login页面的IIS实例的服务器。 需要validation时,通信回ADFS。 一般可公开访问。