Skip to content

SSO 说明文档

目标

在多个互相信任的系统中,用户只需登录一次,就可以访问所有系统。

原始登录地址

各应用系统需要保留原来的登录方式,为防止单点登录出现问题时,能有紧急登录自己应用的方式。

  1. 保留原来登录方式,该登录方式只能通过特定的链接进行访问,并且能登录系统,在未登录状态下,访问该链接,不跳转到 SSO 单点登录界面
  2. 除了特定链接,其他所有链接,在未登录情况下,都跳转到 SSO 单点登录界面

单点接入步骤

  • 第一步:用户访问应用,校验是否登录
  • 第二步:如果未登录,跳转到 SSO跳转 中地址,请根据 SSO跳转 步骤要求进行参数拼接
  • 第三步:应用方获取到授权码code,调用 用户信息 接口,获取用户信息,完成用户校验授权
  • 第四步:应用方如果要退出登录,调用接口 退出登录 接口,注销授权码等信息
  • 第五步:如果有外部用户需要接入,请与 truman.zhang 联系,提供相关外部用户信息

单点登录流程图

跳转

  • 用户访问应用,应用校验授权,如果未授权

  • 跳转到下面地址,下面链接中的添可学院只是为了演示需要,实际是具体的应用链接地址,待跳转的添可学院地址为Url Encode后的值

  • 生产环境域名https://cloud.tineco.com

  • 测试环境域名https://cloud-test.tineco.com

https://cloud.tineco.com/portal/sso?redirect={encodeURIComponent(http://td.tineco.com)}&appid={td}&logout=1
参数名称参数说明是否必须数据类型备注
appid应用idtrueString
redirectencodeURIComponent 编码后的跳转URL地址trueString
logout用于标识是主动退出应用falseStringlogout=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调用

https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/userinfo
  • 请求方式GET
  • 接口描述:根据授权码Code和应用ID获取用户信息
  • 请求参数
参数名称参数说明是否必须数据类型schema
appid应用IDtruestring
code授权码Codetruestring
  • 应用方调用该接口后,会获取到用户的相关信息,之后,由应用方完成对应处理,包括应用方本身的用户校验、用户登录、用户信息入库、用户授权等;
  • 响应状态码
状态码说明schema
200OKPortalSsoUserResponse
  • 响应参数
参数说明备注
email邮箱地址
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/logout

ESB调用

https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/logout
  • 请求方式GET
  • 接口描述:Portal SSO 退出登录接口
  • 请求参数
参数名称参数说明是否必须数据类型备注
appid应用IDtruestring
code授权码Codetruestring

响应状态

状态码说明schema
200OK

响应示例

json
{
  "code": 200,
  "data": true,
  "message": "success"
}

三方系统获取用户信息

三方系统:不使用Gauss框架,但想通过获取Gauss框架体系用户实现自身与其他系统互相跳转的系统

直连

https://cloud-api.tineco.com/user/portal/sso/third/userinfo

ESB调用

https://esb-gateway.tineco.com/restcloud/tineco-user/user/portal/sso/third/userinfo
  • 请求方式POST
  • 接口描述:Portal SSO 三方系统获取用户信息
  • 请求参数
参数名称参数说明是否必须数据类型备注
appId应用IDtruestring
uid用户登录账号truestring
randStr随机字符串truestring
timestamp时间戳truestring精确到毫秒
sign签名值truestring

参数说明

  • appId:应用ID,需将应用注册到添可开发平台
  • uid:用户登录账号,可以是域账号、可以是其他,但也需要注册到添可开发平台
  • randStr:用于参与签名计算的随机字符串,在三方系统的字符串和作为参数传入的要一致
  • timestamp:当前时间戳,取值到毫秒精度
  • sign:上述参数加入和添可开发平台绑定的secret一起计算后的值
  • secret:secret值须和添可开发平台约定,secret只参与md5计算,不可传输,各个平台的secret都不一样,不可重复

签名计算方式

将上述参数,按字母表a-z方式排序,拼接成一个字符串进行md5计算后,取得的值即为对应的sign的值,字符串拼接格式如下:

  • appId={appId}&randStr={randStr}&timestamp={timestamp}&uid={uid}&key={secret}

示例如下

拼接后的字符串
appId=ADMIN&randStr=b2415b5a9dfa4429bc2305094143aa1b&timestamp=1725514697139&uid=test&key=e8949138db224cdfb17b7f521b3646f5

md5计算后的值
051263954fe819a31b60178e499f68b9

sign的值即为
051263954fe819a31b60178e499f68b9

三方系统调用接口传入的参数为
{"appId":"ADMIN","randStr":"b2415b5a9dfa4429bc2305094143aa1b","sign":"051263954fe819a31b60178e499f68b9","timestamp":"1725514697139","uid":"test"}

响应状态

状态码说明schema
200OK

响应示例

json
{
	"code": "8211b900e2c0453b8575b2451b45489a",
	"userinfo": {
            "uid": "test",
            "userId": "88e02f47a68d7b2ddb29874be849faa3",
            "userName": "测试账号"
	}
}

响应结果说明

  • code:用户code,可使用该参数调用 用户信息 接口获取用户信息
  • userinfo
    • uid:用户登录账号
    • userId:添可开发平台中对应用户的用户ID
    • userName:用户名称
    • email:用户邮箱,如果用户配置了
    • workNo:添可域账号会有该信息

联系人