单点登录(Single Sign On,简称SSO)是指在多个应用系统中,用户只需要登录一次即可访问所有相互信任的应用系统。IDaaS的SSO服务用于解决同一公司不同业务应用之间的身份认证问题,实现用户只需要登录一次即可访问所有添加的应用。

IDaaS的SSO服务已满足以下登录场景。

IDP 发起

IDP发起,又称IDaaS发起。即用户登录IDaaS平台,从IDaaS平台登录到具体应用(SP)的应用场景。

  1. 用户登录IDaaS登录页面,输入用户名和密码进行登录IDaaS平台。
  2. 浏览器携带用户名密码向IDaaS平台请求登录。
  3. 通过IDaaS平台认证后,为本次用户登录创建主session并返回应用列表。
  4. 用户登录IDaaS平台成功,查看IDaaS平台展示的应用列表。
  5. 用户单击应用列表中的SP1应用图标。
  6. 浏览器携带SP1应用的应用ID,向IDaaS平台请求生成SP1应用的子token。
  7. IDaaS平台根据收到的信息生成子token并返回给浏览器。
  8. 浏览器携带所生成的子token,向SP1应用请求登录。
  9. SP1应用系统解析收到的子token并进行验证,通过后创建子session并返回登录成功页面。
  10. SP1应用系统单点登录成功,浏览器显示SP1系统登录后的页面。
说明 图中的(11)~(16)展示了SP2应用系统的单点登录流程,其原理与SP1应用系统的流程一致。即在主session创建后,任何一个可单点登录的应用都通过该流程实现单点登录。

SP发起

从应用系统(SP)发起包含两种情况。
  • 访问应用页面
    用户到SP应用页面,在SP通过Redirect或POST方式提交某种认证协议(例如,SAML/CAS)的跳转请求登录IDaaS平台后,再跳转回SP作为应答,从而实现统一认证。

    以通过SAML协议自SP发起的单点登录流程为例。
    1. 用户访问SP资源页面。
    2. 浏览器向SP请求资源。
    3. SP生成SAML认证请求并返回给浏览器。
    4. 浏览器携带SAML认证请求,访问IDaaS SSO URL地址。
    5. IDaaS验证SAML认证请求信息。
      说明 若该用户已登录IDaaS平台则直接跳转至步骤(ix)
    6. 返回IDaaS登录页面。
    7. 用户输入IDaaS平台账户和密码。
    8. 浏览器携带账号密码请求登录IDaaS平台。
    9. 登录IDaaS平台后,IDaaS分析SAML请求验证信息并获取更多信息,然后生成响应token数据。
    10. 返回SAML请求的响应token数据给浏览器。
    11. 浏览器携带SAML响应数据,访问SP验证URL地址。
    12. SP利用公钥验证SAML响应数据。
    13. 验证成功后,返回SP资源URL给浏览器。
    14. 浏览器访问资源页面。
    15. SP返回资源页面。
    16. 用户登录SP资源页面。
  • 访问SP资源
    用户访问SP资源,SP重定向到IDaaS的SSO地址,通过IDaaS认证后向SP返回SP发起登录的页面并携带请求事件的redirect_url参数,用户登录后SP向浏览器返回并显示用户访问的资源页面。

    1. 用户访问SP资源页面。
    2. 浏览器向SP请求资源。
    3. SP检测该用户的登录情况。
      说明 若该用户已登录IDaaS平台则直接跳转至步骤(ix)
    4. SP重定向到IDaaS SSO URL地址。
    5. 向浏览器返回IDaaS提供SP发起单点登录的页面并携带请求的redirect_url参数。
    6. 用户输入IDaaS平台账户和密码。
    7. 浏览器携带账号密码请求登录IDaaS平台。
    8. IDaaS平台对账户进行认证。
    9. IDaaS平台返回deeplinking和id_token给浏览器。
    10. 浏览器携带数据访问SP进行验证。
    11. SP通过PublicKey对id_token进行校验。
    12. 向浏览器返回用户访问的deeplinking地址并创建session。
    13. 用户查看到访问的SP资源页面。

接口后置

应用系统(SP)登录时使用IDaaS进行接口后置认证的登录场景。

  1. 用户访问SP1登录页面。
  2. 浏览器请求SP1登录页面。
  3. SP1返回应用系统登录页面。
  4. 用户看到SP1登录页面。
  5. 用户输入用户名密码进行登录。
  6. 浏览器携带用户名、密码向SP1发起登录请求。
  7. SP1使用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登录成功页面。

登录跳转

用户到SP应用系统页面,跳转到IDaaS平台登录页面进行统一认证,登录成功后返回包含更多用户信息的JWT token 到SP页面,包括应用列表和访问另一个SP应用的子token,从而实现单点登录。

  1. 用户访问SP1系统登录页面。
  2. 浏览器向SP1请求登录页面。
  3. SP1返回重定向地址。
  4. 浏览器访问重定向地址。
  5. IDaaS返回登录页面。
  6. 浏览器携带用户提交的用户名、密码和应用id,向IDaaS请求登录。
  7. IDaaS本地认证成功后,创建主session并返回应用列表的JWT token(其中包含子token)。
  8. 浏览器接收信息后,校验并解析出子token,向SP1请求认证登录。
  9. SP1获取子token并解析后,创建子session并返回登录成功页面。
  10. 用户看到SP1登录成功页面。
  11. 用户在SP1成功登录后,访问SP2登录页面。
  12. 浏览器向SP2请求登录页面。
  13. SP2返回重定向地址。
  14. 浏览器访问重定向地址。
  15. IDaaS由于已为该用户登录创建主session,直接根据应用id生成SP2系统的子token并返回。
  16. 浏览器携带子token ,向SP2发起请求。
  17. SP2解析子token后,创建子session并返回SP2登录成功页面。
  18. 用户看到SP2登录成功页面。