验证委托给外部身份提供者。这种模式可以简化开发,最大限度地减少对用户管理的要求,并提高了应用程序的用户体验。
用户通常需要使用由提供,并通过与它们有商业关系的不同组织主持的多个应用程序一起工作。但是,这些用户可能被迫使用特定的(和不同的)的凭证,每一个。这可以:
用户会相反,通常期望使用相同的凭证用于这些应用。
实现了可以使用联合身份的认证机制。从应用程序代码中分离的用户身份验证和身份验证委派到受信任的身份提供者,可以大大简化开发,让用户使用更广泛的身份提供者(国内流离失所者),同时最大限度地减少管理开销进行身份验证。它也可以让你清楚地分离的授权认证。
可信身份提供者可能包括公司目录,内部部署联合身份验证服务,其他安全令牌服务(STS的)业务合作伙伴提供的,或社会身份提供者可以验证谁拥有用户,例如,微软,谷歌,雅虎或Facebook帐户。
图1示出了当客户端应用程序需要访问要求身份验证的服务的联合身份模式的原理。该认证是通过身份提供者(IDP),在演唱其工作与安全令牌服务(STS)的执行。境内流离失所者问题的主张有关身份验证的用户的信息安全令牌。该信息被称为权利要求中,包括用户的身份,并且还可以包括其他信息,例如角色成员和更细粒度的访问权限。
该模型通常被称为基于声明的访问控制。应用程序和服务授权访问基于包含在令牌中的权利要求的特征和功能。要求身份验证必须相信国内流离失所者的服务。客户端应用程序的联系人执行身份验证境内流离失所者。如果认证成功,则的 IdP 返回包含用于识别用户于 STS 的权利要求书的令牌(注意的 IdP 和 STS 可以是相同的服务)。在 STS 可以改变和增大中根据预定义的规则,令牌中的权利要求书,将其返回到客户端之前。然后,客户端应用程序可以将此令牌传递给服务作为其身份证明。
注意 在某些情况下可能会有额外的 STS 的信任链。例如,在微软 Azure 的场景描述后,内部部署 STS 信任 STS 另一个是负责访问的身份提供者对用户进行认证。这种方法是在企业的情况普遍,其中有一个本地 STS 和目录。
联合身份验证提供了一个基于标准的解决方案,在不同信任域身份的问题,并且可以支持单点登录。它正在成为在所有类型的应用,特别是云托管的应用越来越普遍,因为它支持上,而不需要直接网络连接到身份提供单点登录。用户不必输入凭据为每一种应用。这增加了安全性,因为它阻止了访问许多不同的应用程序所需的凭据的扩散,同时也隐藏了用户的凭据所有,但原来的身份提供者。应用程序只看到包含的令牌中的身份验证信息。
联合身份也具有重大的优点,即人的身份和凭证管理是身份提供者的责任。应用程序或服务并不需要提供身份管理功能。另外,在企业环境中,企业目录不需要知道关于用户(提供它信任的身份提供者),它去除了管理该目录中的用户身份的所有的管理开销。
设计实现联合身份验证的应用程序时考虑以下因素:
此模式是非常适合的范围内的情况下,如:
这种模式可能不适合于下列情况:
组织举办了多租户软件即在 Azure 中的服务(SaaS)应用程序。该应用程序 incudes 一个网站,租户可以用它来管理应用程序为自己的用户。该应用程序允许租户使用由活动目录联合服务(ADFS)产生的,当用户通过该组织自己的 Active Directory 身份验证的联合身份访问租户的网站。
图2 - 用户如何在大型企业用户访问应用程序
在图 2 所示的场景中,商户验证自己的身份提供者(步骤1),在这种情况下 ADFS。在成功验证租客,ADFS 发出的令牌。客户端浏览器转发此令牌至 SaaS 应用的联合提供者,其信任的租户的 ADFS 发出令牌,以便取回的令牌是有效的 SaaS 的联合提供者(步骤 2)。如果有必要,在 SaaS 联合会提供商上执行令牌中的权利要求书的权利要求到该应用程序识别的新令牌返回给客户机浏览器之前(步骤3)的变换。应用程序信任的 SaaS 的联合提供者发出的令牌,并使用在令牌中的权利要求书申请授权规则(步骤 4)。
租户将不再需要记住不同的凭据来访问应用程序,以及管理员租户的公司将能够在自己的 ADFS 配置可以访问应用程序的用户的列表。