实现原理
TOPIAM 提供了基于 JWT 协议实现SSO应用模板。 JWT 应用支持IDP发起和SP发起两种单点登录场景:
-
IDP发起:即从 TOPIAM 平台直接发起单点登录请求,传递 JWT 令牌至业务系统, 继而在业务系统进行验证,完成登录。
-
SP发起:即从SP(业务系统)发起单点登录请求,跳转到 TOPIAM 平台,进行登录,再跳转回业务系统完成 JWT 令牌认证从 而实现业务系统的登录。
登录流程
IDP 发起登录流程
步骤描述
- 用户访问登录认证服务器(1-2)
- 点击SP应用图标,IDP发送 id_token 到业务系统
- SP验证 id_token 合法性,解析获取用户信息,判断业务系统中是否存在该用户
- SP创建会话,并跳转到指定路径
- 登录成功、用户操作业务系统
SP 发起登录流程
IDP/SP发起登录区别
-
相同点:都需要业务系统开发 JWT 令牌验证和解析的接口,并根据解析出来的用户子账户信息,判断用户是否为该业务系统用户。
-
不同点:两者发起入口不同,从 TOPIAM 平台发起单点登录,用户直接通过点击 TOPIAM 平台首页的 JWT 应用(即业务系统),就能完成 JWT 令牌认证和业务系统的登录;而从SP(业务系统)发起单点登录,此时业务系统不一定已经完成了 TOPIAM 平台的登录,或者登录信息过期 失效,这时候业务系统会跳转到 TOPIAM 登录页面,在用户进行登录后,由 TOPIAM 携带 JWT 令牌跳转到业务系统完成 JWT 令牌认证和业务系统的登录。
JWT 实现
用户进行 SSO 操作后,TOPIAM 平台将颁发 id_token
,id_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 验签公钥,获取公钥证书信息,如下: