统一身份认证与授权中三种最常见的Web安全协议是OpenID,OAuth和SAML。本文通过举例来介绍这三种协议的含义和之间的不同。
做为一个面向公众的网站都希望能够对每个用户进行身份验证和授权。身份验证意味着验证某人确实是他们声称的身份。授权意味着决定某个用户能够访问哪些资源,以及允许他们对这些资源执行哪些操作。
对于Facebook或Google等网站,用户可以使用一组凭证登录到一个应用程序。然后可以使用同一组凭证登录相关网站或应用程序。而对于企业来说,可能有一个面向内部的员工门户网站,通过让员工登录门户,并让该门户自动通过其他Intranet站点对用户进行身份验证。这种称为单点登录(SSO)的想法允许用户输入一个用户名和密码可以访问多个应用程序。
这样做对用户来说非常好,他们只需管理相关网站的一个用户名和密码,同时可以避免多次登录。用户(单组)凭证将存储在一个数据库中,而不是存储在多个数据库中的多个凭证。这也意味着各种应用程序的开发人员不必存储密码,而是接受来自可信来源的身份证明或授权。
实施SSO有多种解决方案。三种最常见的Web安全协议是OpenID,OAuth和SAML。
OpenID是一种开放的身份验证标准,由非营利性OpenID Foundation推广。Google,WordPress,Yahoo和PayPal等组织都支持使用OpenId对用户进行身份验证。
用户必须通过OpenID帐户身份提供商(例如,谷歌)得到一个OpenID。然后,用户将使用该帐户登录任何接受OpenID身份验证的网站(依赖方)(例如YouTube或其他接受Google帐户登录的网站)。OpenID标准为身份提供者和依赖方之间必须进行的通信提供了框架。
这种交换可以与过海关进行比较。想象一下,爱丽丝是一个想要访问美国的加拿大公民。在边境,美国要求提供身份证明(她的护照)。由于美国政府信任加拿大政府为其公民提供的身份证明,美国接受爱丽丝的护照作为其身份的可靠证据,因此,让她进入美国。在此示例中,Alice是最终用户,US是依赖方,Canada是身份提供者。
这种交换是有效的,因为Alice可以向美国提供来自美国信任的实体的身份证明。同样,依赖方(或用户尝试登录的网站)必须信任验证用户身份的OpenID身份提供者。
相比之下,OAuth2是授权的开放标准。OAuth2也是OpenID Connect的基础,OpenID Connect在OAuth2(授权)之上提供OpenID(身份验证),以获得更完整的安全解决方案。OpenID Connect(OIDC)于2014年初创建。
OAuth2提供安全的委派访问,这意味着称为客户端的应用程序可以代表用户在资源服务器上执行操作或访问资源,而无需用户与应用程序共享其凭据。OAuth2通过允许令牌由身份提供商向这些第三方应用程序发布,并经用户批准来实现此目的。然后,客户端使用令牌代表用户访问资源服务器。
然而,Twitter的OAuth指南 称OAuth2是一种身份验证标准。为什么要这么说呢?事实证明,授权可以用作伪认证的一种形式。
OAuth2的授权使用案例可能如下:Alice正在离开城镇,她希望她的朋友鲍勃能够帮忙照看房子。爱丽丝给鲍勃房子钥匙,他现在有权进入房子。密钥授予他进入房屋的授权,因为授权涉及用户应该访问哪些资源,以及他们可以使用这些资源做什么。在这个比喻中,房主是用户,鲍勃是客户,门锁是身份提供者,房子是资源服务器。
通过假设拥有房屋钥匙的人是房主,可以将其映射成伪认证用例。然而,正如我们可以看到鲍勃坐在爱丽丝家中,但他并不是房主。
SAML是三者中最古老的标准,最初于2001年开发,其最新的主要更新发布于2005年.SAML,发音为“sam-el”,代表安全断言标记语言。它是一个提供身份验证和授权的开放标准。
与其他两个标准的术语类似,SAML定义了一个主体,即最终用户尝试访问资源。有一个服务提供程序,它是委托人试图访问的Web服务器。还有一个身份提供者,它是拥有主体身份和凭据的服务器。
美国/加拿大的比喻也可以在这里使用。爱丽丝希望从加拿大进入美国。美国希望验证她的身份或其他有关她的信息 - 她是否拥有允许她在美国驾驶的有效驾驶执照 - 向加拿大提出有关Alice的身份验证和/或授权信息的请求。加拿大通过将所要求的信息发送到所请求的地址以及加拿大确实是该消息的发送者的一些证据来做出回应。这个证据可能像以前一样采用护照的形式,或官方的政府文件或签证(涉及授权请求)。而且,和以前一样,该系统的前提是美国信任加拿大正在发放驾驶执照,签证等。
在我们的示例中,Alice是委托人,美国是服务提供商,加拿大再次是身份提供者。美国向加拿大提出的请求类似于XML消息,该消息说明正在请求哪些信息,谁在询问以及应该向谁返回响应。加拿大的回复将被称为断言,类似于OpenID或OAuth2的令牌。此断言可以包含有关身份验证,授权和/或属性(有关用户的特定信息,如电子邮件或电话号码)的声明。
SAML 2.0规范定义了断言(如上所述); 协议:即断言请求和响应; 绑定:这些请求和响应如何在服务提供者和身份提供者之间发生,使用标准通信方法(例如HTTP POST); 和配置文件:它们是各种用例(如SSO)的断言,协议和绑定的组合。