单点登录(SSO)概述 v1.2

单点登录(SSO),英文全称为 Single Sign On。 SSO 是指在多个应用系统中,用户只需要登录一次,就可以访问所有相互信任的应用系统。IDaaS SSO 服务用于解决同一公司不同业务应用之间的身份认证问题,只需要登录一次,即可访问所有添加的应用。此服务可以涵盖用户在公有云和私有云中的双重需求。

说明 本文档默认你已经拥有了开发者权限,并已经阅读了 准备开发 文档 和 应用管理 文档。如果需要分配新的开发者权限的话,请联系 IT 管理员进行授权操作。

单点登录场景

在单点登录实现过程中,现已满足以下登录场景,包括:

  1. IDaaS发起
  2. SP发起
  3. 接口后置
  4. 登录跳转

IDaaS发起

用户登录 IDaaS 平台,从 IDaaS 登录到 SP 应用场景,如下图所示:

(1)用户访问 IDaaS 登录页面输入用户名和密码进行登录

(2)浏览器携带用户名密码向 IDaaS 请求登录

(3)IDaaS 认证通过后,创建主 session ,并返回应用列表给浏览器

(4)IDaaS 登录成功,用户可以看到 IDaaS 展示的应用列表

(5)用户点击应用列表中的 SP1 应用图标

(6)浏览器携带 SP1 应用的应用 id,向 IDaaS 请求生成 SP1 应用子 token

(7)IDaaS 根据信息生成子 token 并返回给浏览器

(8)浏览器携带子 token ,向 SP1 请求登录

(9)SP 1 应用系统解析获取的子 token ,验证通过后,创建子 session 并返回登录后页面

(10)SP 1 系统单点登录成功,浏览器显示 SP1 系统登录后页面

(11)~(16)表示 SP2 系统的单点登录流程,与 SP1 系统步骤一致,即在主 session 创建后,任何一个可单点登录应用进行单点登录的流程只需重复(5)~(10)即可

SP发起

SP 发起主要应用于 SSO 后可以跳回发起 SSO 的应用页面。下面以 SAML 和 JWT 的实现为例来阐述 SP 发起的单点登录流程。

1、访问应用页面

用户到 SP 应用页面,会在 SP 通过 Redirect 或 POST 提交一个某种认证协议如 SAML / CAS 的挑战请求, 在 IDaaS 登录后, 再跳转回 SP 作为应答, 实现统一认证,如下图所示:

以 SAML 协议 SP 发起的单点登录为例:

(1)用户访问 SP 资源页面

(2)浏览器向 SP 请求资源

(3)SP 生成 SAML AuthnRequest 请求,其中包含当前 URL 到 RelayState,并返回给浏览器

(4)浏览器携带 SAML AuthnRequest 请求,访问定义好的 IDaaS 中 SP 发起的 SSO URL

(5)IDaaS 验证 SAML AuthnRequest,若该用户已登录直接跳至步骤(9),否则继续步骤(6)

(6)重定向到 IDaaS 登录页面

(7)用户输入 IDaaS 的账户和密码

(8)浏览器携带账号密码请求登录 IDaaS

(9)登录 IDaaS 后, IDaaS 分析 SAML AuthnRequest 中的 SP 应用信息,并获取更多用户信息,然后组合生成响应包含 RelayState 的 SAML Response Token。

(10)返回 SAML Response Token 数据给浏览器

(11)浏览器进行跳转,携带 SAML Response Token,访问 SP ACS URL

(12)SP 利用公钥验证 SAML Response Token

(13)校验成功后,创建 session 会话,从 RelayState 中取出开始时发起的 URL,返回给浏览器

(14)浏览器访问资源页面(15)SP 返回资源页面(16)用户登录进 SP 资源页面

2、访问 SP 资源

用户访问 SP 资源,SP 会重定向到 IDaaS 的 SSO 地址,在 IDaaS 认证通过后,会向 SP 返回 SP 发起登录的页面并携带请求事件redirect_url参数,用户登录后 SP会向浏览器返回并显示用户访问的资源页面,如下图所示:

以 JWT 协议 SP 发起的单点登录为例:

(1)用户访问 SP 资源页面

(2)浏览器向 SP 请求资源

(3)SP 检测登录,若该用户已登录直接跳至步骤(9),未登录继续到(4)

(4)SP 把当前页面地址置入 redirect_url 参数,并重定向到 SP SSO URL

(5)重定向到 IDaaS 登录页面

(6)用户输入 IDaaS 的账户和密码进行登录

(7)浏览器携带账号密码请求登录 IDaaS

(8)IDaaS 对账户进行认证并通过

(9)返回 JWT SSO URL,在 URL 中包含了 id_token 和 target_url

(10)浏览器携带上述参数跳转到 redirect_url

(11)SP 通过 PublicKey 对 id_token 进行校验

(12)校验成功后,创建 session 会话,向浏览器返回用户访问的 redirect_url 地址并进行跳转

(13)用户查看到之前访问的页面资源

接口后置

SP 登录时使用 IDaaS 进行接口后置认证登录场景,如下图所示:

(1)用户访问 SP1 登录页面

(2)浏览器请求 SP1 登录页面

(3)SP 1 返回其登录页面

(4)用户看到 SP1 登录页面

(5)用户输入用户名密码进行登录

(6)浏览器携带用户名、密码向 SP1 发起登录请求

(7)SP 1 使用 IDaaS 接口进行认证,将用户名、密码传递给 IDaaS 进行认证登录

(8)IDaaS 进行认证后,生成主 token ,并返回主 token 和应用列表以及用户信息给 SP1

(9)登录 SP1 成功,浏览器获取到 SP1 登录后页面

(10)用户可看到 SP1 登录后页面,可看到显示的应用列表

(11)用户在 SP1 显示的应用列表中点击 SP2 应用图标进行单点登录

(12)浏览器携带主 token 和应用id,向 IDaaS 请求生成子 token

(13)IDaaS 返回 SP2 的子 token 以及 SP2 重定向地址

(14)浏览器携带子 token 访问 SP2 重定向地址

(15)SP2 解析子 token ,验证成功,并返回 SP2 登录后页面

(16)用户看到 SP2 登录后页面, SP2 应用系统登录成功

登录跳转

用户到 SP 应用页面,会跳转到 IDaaS 登录页面进行统一认证,登录后,返回一个包含更多用户信息 JWT token 到 SP 页面,包括应用列表和访问一个 SP 应用的子token,从而实现单点登录。如下图所示:

(1)用户访问 SP1 系统登录页面

(2)浏览器向 SP1 请求登录页面

(3)SP 1 返回重定向地址

(4)浏览器访问重定向地址

(5)IDaaS 返回登录页面

(6)浏览器携带用户提交的用户名密码以及应用id,向 IDaaS 请求登录

(7)IDaaS 本地认证成功后,创建主 session ,并返回应用列表的 JWT token 内含了子 token

(8)浏览器接收信息后,校验并解析出子 token ,向 SP1 请求认证登录

(9)SP 1 获取子 token 并解析后,创建子 session ,并返回登录后页面

(10)用户看到 SP1 登录后页面, SP1 登录成功

(11)用户在 SP1 已成功登录后,访问 SP2 登录页面

(12)浏览器向 SP2 请求登录页面

(13)SP2 返回重定向地址

(14)浏览器访问重定向地址

(15)IDaaS 由于主 session 已创建,可直接根据应用id生成 SP2 系统的子 token ,并返回子 token

(16)浏览器携带子 token ,向 SP2 发起请求

(17)SP2 解析子 token 后,创建子 session 并返回 SP2 登录后页面

(18)用户看到 SP2 登录后页面, SP2 登录成功

FAQ

1. SP发起登录和接口后置有什么区别

SP向IDaas发起, 是直接使用IDaaS的应用模板进行配置,使用IDaaS提供的登录页面进行登录,如下图位置获取sp发起地址; 接口后置是使用API令牌(STS)获取id_token, 是应用集成IDaaS的登录接口, 登录页面由应用自身提供

2. 接口后置使用哪个接口

使用STS安全令牌的获取id_token的接口,用户在应用页面输入完信息后, sp转发请求给IDaaS做验证,IDaaS正常返回id_token代表验证用户成功 。接口:/api/public/bff/v1.2/sts/retrieve_id_token https://help.aliyun.com/document_detail/145016.html

3. 如何确定使用哪个协议模板对接,是否需要开发

如果是支持标准协议的,如jira,confluence,可以自行在管理员侧选择对应模板,如SAML模板进行配置; 如果是登录方式简单的,只有用户名和密码登录,并且不是前后端分离,可以尝试使用表单代填自己对接; 如果上面两种方式不行,那么应用需要改造以对接单点登录,IDaaS推荐使用JWT方式,集成简单,直接集成IDaaS提供的SDK实现。