Appearance
SSO 说明文档
目标
在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。
原始登录地址
各应用系统需要保留原来的登录方式,为防止单点登录出现问题时,能有紧急登录自己应用的方式。
- 保留原来登录方式,该登录方式只能通过特定的链接进行访问,并且能登录系统,在未登录状态下,访问该链接,不跳转到 SSO 单点登录界面。
- 除了特定链接,其他所有链接,在未登录情况下,都跳转到 SSO 单点登录界面。
单点接入步骤
- 第一步:用户访问应用,校验是否登录
- 第二步:如果未登录,跳转到 SSO跳转 中地址,请根据 SSO跳转 步骤要求进行参数拼接
- 第三步:应用方获取到授权码code,调用 用户信息 接口,获取用户信息,完成用户校验授权
- 第四步:应用方如果要退出登录,调用接口 退出登录 接口,注销授权码等信息
- 第五步:如果有外部用户需要接入,请与 truman.zhang 联系,提供相关外部用户信息
单点登录流程图
.png)
跳转
用户访问应用,应用校验授权,如果未授权
跳转到下面地址,下面链接中的添可学院只是为了演示需要,实际是具体的应用链接地址,待跳转的添可学院地址为Url Encode后的值
生产环境域名:https://cloud.tineco.com
https://cloud.tineco.com/portal/sso?redirect={encodeURIComponent(http://td.tineco.com)}&appid={td}&logout=1| 参数名称 | 参数说明 | 是否必须 | 数据类型 | 备注 |
|---|---|---|---|---|
| appid | 应用id | true | String | |
| redirect | encodeURIComponent 编码后的跳转URL地址 | true | String | |
| logout | 用于标识是主动退出应用 | false | String | logout=1,固定值 |
- 填写用户名密码,进行登录
- 登录成功后,自动重定向到
http://td.tineco.com - 获取到授权码code后调用sso-server接口获取用户信息
- 获取到用户信息,在应用中完成用户授权
参数说明
- logout=1:该参数用于标识是用户主动退出应用,一般来说,用户主动退出后,都是跳转到SSO登录中转页面,但Portal门户是不会退出的,SSO自动登录在登录中转页做了处理,会自动从门户信息中获取授权码 code 再次主动发起自动登录,添加参数logout=1后,是为了通知自动处理流程,不再主动发起自动登录。
用户信息
直连
https://cloud-api.tineco.com/user/portal/sso/userinfo?code={code}&appid={appid}ESB调用
- ESB生产环境域名:https://esb-gateway.tineco.com
- ESB测试环境域名:https://t-esb-gateway.tineco.com
https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/userinfo- 请求方式:
GET - 接口描述:根据授权码Code和应用ID获取用户信息
- 请求参数
| 参数名称 | 参数说明 | 是否必须 | 数据类型 | schema |
|---|---|---|---|---|
| appid | 应用ID | true | string | |
| code | 授权码Code | true | string |
- 应用方调用该接口后,会获取到用户的相关信息,之后,由应用方完成对应处理,包括应用方本身的用户校验、用户登录、用户信息入库、用户授权等;
- 响应状态码
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK | PortalSsoUserResponse |
- 响应参数
| 参数 | 说明 | 备注 |
|---|---|---|
| 邮箱地址 | ||
| uid | 用户登录账号(内部账号为域账号,外部账号手动设置) | |
| userId | 用户中心用户ID | |
| userName | 用户名,一般为用户中文名 | |
| workNo | 用户工号(外部账号没有该参数,将不返回该属性) |
- 响应示例
- 成功
json
{
"code": 200,
"data": {
"email": "san.zhang@tineco.com",
"uid": "san.zhang",
"userId": "97bac8f032164eb52ec99ee7bde6f351",
"userName": "张三",
"workNo": "18888"
},
"message": "success"
}- 失败
json
{
"code": 10103,
"message": "无效的code"
}退出登录
直连
https://cloud-api.tineco.com/user/portal/sso/logoutESB调用
- ESB生产环境域名:https://esb-gateway.tineco.com
- ESB测试环境域名:https://t-esb-gateway.tineco.com
https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/logout- 请求方式:
GET - 接口描述:Portal SSO 退出登录接口
- 请求参数
| 参数名称 | 参数说明 | 是否必须 | 数据类型 | 备注 |
|---|---|---|---|---|
| appid | 应用ID | true | string | |
| code | 授权码Code | true | string |
响应状态
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK |
响应示例
json
{
"code": 200,
"data": true,
"message": "success"
}三方系统获取用户信息
三方系统:不使用Gauss框架,但想通过获取Gauss框架体系用户实现自身与其他系统互相跳转的系统
直连
https://cloud-api.tineco.com/user/portal/sso/third/userinfoESB调用
- ESB生产环境域名:https://esb-gateway.tineco.com
- ESB测试环境域名:https://t-esb-gateway.tineco.com
https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/third/userinfo- 请求方式:
POST - 接口描述:Portal SSO 三方系统获取用户信息
- 请求参数
| 参数名称 | 参数说明 | 是否必须 | 数据类型 | 备注 |
|---|---|---|---|---|
| appId | 应用ID | true | string | |
| uid | 用户登录账号 | true | string | |
| randStr | 随机字符串 | true | string | |
| timestamp | 时间戳 | true | string | 精确到毫秒 |
| sign | 签名值 | true | string |
参数说明
- appId:应用ID,需将应用注册到添可开发平台
- uid:用户登录账号,可以是域账号、可以是其他,但也需要注册到添可开发平台
- randStr:用于参与签名计算的随机字符串,在三方系统的字符串和作为参数传入的要一致
- timestamp:当前时间戳,取值到毫秒精度
- sign:上述参数加入和添可开发平台绑定的secret一起计算后的值
- secret:secret值须和添可开发平台约定,secret只参与md5计算,不可传输,各个平台的secret都不一样,不可重复
签名计算方式
将上述参数,按字母表a-z方式排序,拼接成一个字符串进行md5计算后,取得的值即为对应的sign的值,字符串拼接格式如下:
appId={appId}&randStr={randStr}×tamp={timestamp}&uid={uid}&key={secret}
示例如下
拼接后的字符串
appId=ADMIN&randStr=b2415b5a9dfa4429bc2305094143aa1b×tamp=1725514697139&uid=test&key=e8949138db224cdfb17b7f521b3646f5
md5计算后的值
051263954fe819a31b60178e499f68b9
sign的值即为
051263954fe819a31b60178e499f68b9
三方系统调用接口传入的参数为
{"appId":"ADMIN","randStr":"b2415b5a9dfa4429bc2305094143aa1b","sign":"051263954fe819a31b60178e499f68b9","timestamp":"1725514697139","uid":"test"}响应状态
| 状态码 | 说明 | schema |
|---|---|---|
| 200 | OK |
响应示例
json
{
"code": "8211b900e2c0453b8575b2451b45489a",
"userinfo": {
"uid": "test",
"userId": "88e02f47a68d7b2ddb29874be849faa3",
"userName": "测试账号"
}
}响应结果说明
- code:用户code,可使用该参数调用 用户信息 接口获取用户信息
- userinfo
- uid:用户登录账号
- userId:添可开发平台中对应用户的用户ID
- userName:用户名称
- email:用户邮箱,如果用户配置了
- workNo:添可域账号会有该信息
