单点登录解决方案
单点登录 (SSO) 是一种身份验证过程,在该过程中,用户仅使用一组登录凭据即可访问多个应用程序或网站,这避免了用户分别登录不同应用程序需要输入不同验证信息的麻烦。用户凭据和其他识别信息由称为身份提供者(IdP)的集中式系统存储和管理。身份提供者是一个受信任的系统,可以提供对其他网站和应用程序的访问。基于单点登录 (SSO) 的身份验证系统通常用于员工需要访问其组织的多个应用程序的企业环境中。
单点登录SSO的好处
- 由于 SSO 允许用户使用他们自己的登录系统进行身份验证,因此它还允许管理员管理用户帐户并使员工能够在公司使用的多个应用程序中使用它。
- SSO 允许管理员立即控制对所有应用程序的访问,而不是登录 100 个不同的用户管理门户来更改用户权限。
- 重要的是,SSO 还有助于提高安全性。由于只有一个系统保存所有员工信息,因此保护一个地方比保护数百个不同的帐户容易得多,后者可能成为可能的“泄漏”。
单点登录验证过程示例图
SAML 2.0、 OAuth 2.0、 OpenID Connect的对比
| SAML | OAuth | OpenID Connect | |
|---|---|---|---|
| Description | Open standard for authorization and authentication | Open standard for authorization | Open standard for authentication |
| Primary user case | SSO for enterprise applications | API authorization | SSO for consumer applications |
| Data format | XML | JSON | JSON |
SAML 2.0 协议
SAML 是唯一同时支持身份验证和授权的标准。SAML通过支持服务提供商和身份提供商端的数据签名和加密,为公司提供更多控制,以保持其 SSO 登录更安全。因此,如果需要,可以对整个过程的数据进行加密,并且攻击无法对其进行解密,除非他们已经可以访问服务和身份提供者的私钥。
该过程进行如下:
- 用户向服务提供商请求启动 SSO。
- 服务提供商创建 base64 编码的身份验证请求并将其发送给身份提供商。
- 身份提供者接收身份验证请求,对其进行验证,并请求用户进行身份验证(登录)。
- 身份提供者发送带有 base64 编码 SAML 响应的用户 XHTML 表单。
- 用户向服务提供商发送 SAML 响应。
- 服务提供商验证 SAML 响应并将用户重定向到目标资源。
实施单点登录
大多数情况下,身份验证请求是使用 HTTP-Redirect 或 HTTP-Post 绑定发送的,因为数据负载很小。但是,由于 SAML 响应通常太大而无法放入 url,因此通常的做法是使用 HTTP-Post 绑定来传输 SAML 响应数据。