跳到主要内容

实现原理

TOPIAM 提供了基于 JWT 协议实现SSO应用模板。 JWT 应用支持IDP发起和SP发起两种单点登录场景:

  1. IDP发起:即从 TOPIAM 平台直接发起单点登录请求,传递 JWT 令牌至业务系统, 继而在业务系统进行验证,完成登录。

  2. SP发起:即从SP(业务系统)发起单点登录请求,跳转到 TOPIAM 平台,进行登录,再跳转回业务系统完成 JWT 令牌认证从而实现业务系统的登录。

登录流程

IDP 发起登录流程

步骤描述

  1. 用户访问登录认证服务器(1-2)
  2. 点击SP应用图标,IDP发送 id_token 到业务系统
  3. SP验证 id_token 合法性,解析获取用户信息,判断业务系统中是否存在该用户
  4. SP创建会话,并跳转到指定路径
  5. 登录成功、用户操作业务系统

SP 发起登录流程

IDP/SP发起登录区别

  • 相同点:都需要业务系统开发 JWT 令牌验证和解析的接口,并根据解析出来的用户子账户信息,判断用户是否为该业务系统用户。

  • 不同点:两者发起入口不同,从 TOPIAM 平台发起单点登录,用户直接通过点击 TOPIAM 平台首页的 JWT 应用(即业务系统),就能完成 JWT 令牌认证和业务系统的登录;而从SP(业务系统)发起单点登录,此时业务系统不一定已经完成了 TOPIAM 平台的登录,或者登录信息过期失效,这时候业务系统会跳转到 TOPIAM 登录页面,在用户进行登录后,由 TOPIAM 携带 JWT 令牌跳转到业务系统完成 JWT 令牌认证和业务系统的登录。

JWT 实现

用户进行 SSO 操作后,TOPIAM 平台将颁发 id_tokenid_token为标准 JWT 格式,通过 jwt.io 解析后 Payload 包含以下内容:

{
"iss": "http://127.0.0.1:8000/api/v1/authorize/jwt/01pmfqpukrokejzfavniudaxhmsxnc3j/sso",
"iat": 1690351263,
"sub": "test",
"aud": "01pmfqpukrokejzfavniudaxhmsxnc3j",
"exp": 1690351863
}

主体信息

在生成的 id_token 中,标准声明字段 sub 的值表示登录者身份。具体取值为:

  • 当应用设置 id_token 主体类型为用户 ID 时,sub 取值为登录用户 ID(userId)。
  • 当应用设置 id_token 主体类型为应用账户时,sub 取值为应用帐号名(accountName)。

签名算法

{
"alg": "RS256"
}
  • 采用 RS256 签名算法生成签名信息,RSA 密钥长度为 2048 位。密钥对随 JWT 应用创建时一并生成,保存于认证服务器。

  • 应用系统验证 token 的有效性,需要使用该应用的公钥进行验签,登录 TOPIAM 系统 【选定指定应用】> 单击【管理】>【应用配置信息】 对应的 JWT 验签公钥,获取公钥证书信息,如下: