Skip to main content

VBaseSSO 单点登录

VBaseSSO 单点登录,包括了V-AppServer 单点登录到 V 系统、V-AppServer 单点登录第三方系统、以及第三方系统登录到 V-AppServer 等。

1. V-AppServer 单点登录到 V 系统

1.1 场景说明

支持A系统(V-AppServer)单点登录到B系统(V-AppServer)。

举例:登录A系统后,在A系统打开B系统的页面(需要登录),实现自动登录。

info

在该登录场景中,父应用即系统A,子应用即系统B。

img

1.2 父应用单点登录配置

A 系统配置中心,设置【VBASE-单点登录】,选择其中一个第三方系统配置参数(支持多个单点登录系统)。

访问目录:配置中心 → 系统高级配置 → 系统维护 → 配置管理。

配置参数说明:

配置参数说明
  • bizSysId :第三方业务系统标识;

  • bizSysSecret :第三方业务系统密钥;

  • bizSysRequestUrl :第三方单点登录接口地址;如果B系统也是V-AppServer,则默认单点登录接口地址,仅修改子应用服务地址如:

http://10.1.28.143:8091/module-operation!executeOperation?operation=VSSOLogin

img

img

1.3 子应用单点登录配置

B 系统配置中心,设置【VBASE - 接收单点登录方配置】。

访问目录:配置中心 → 系统高级配置 → 系统维护 → 配置管理。

配置参数说明

bizSysId :(必填)系统唯一标示;

bizSysSecret :(必填)秘钥;

customLoginConvert :自定义登录信息转换,默认账号转换;

signature_valid : 数字签名有效期,单位:秒,默认600秒(10分钟);

signature_buff_time : 数字签名网络最大缓冲期,单位:秒,默认300秒(5分钟);

custom_login_executor :自定义登录执行器,默认vbase登录;

自定义登录信息转换和自定义登录执行器的实现,参考4.单点登录自定义EP实现。

img

img

1.4 单点登录地址获取

VBase 在开发平台提供 API,获取配置管理的单点登录地址。

在父系统中调用构件方法:

构件编码:vbase_sso

方法编码:API_VSSOCreateSSOThirdPartyUrl

方法输入:

编码名称
redirectUri单点登录成功后目标地址(无需url编码)
bizSysId单点登录业务系统标识
additionalProps增加租户编码的附加属性propertyKey=”tenant_code”propertyValue=多租户系统租户编码

方法输出:

编码名称
requestUrl单点登录地址(页面打开的链接地址)
isSuccess是否成功
errorDetail异常信息
errorCode错误编码

1.5 示例

实现效果:登录 A 系统后,单点登录打开 B 系统页面。

A 系统调用 vbase_sso.API_VSSOCreateSSOThirdPartyUrl (生成第三方系统请求url) 生成单点登陆到 B 系统的链接地址:

http://10. ###1.28.143:8091/webapi/vbase_sso/API_VSSOCreateSSOThirdPartyUrl?
redirectUri=http%3a%2f%210. ###1.28.143:8094%2fmodule-operation!executeOperation
%3fcomponentCode%3derp_loginframe%26windowCode%3dindex&bizSysId=test

返回结果:

{
"msg":"",
"data":{
"requestUrl":"http://10. ###1.28.143:8091/module-operation!executeOperation?
operation=VSSOLogin&login_sso=eyJzc29fc2lnIjoiODFmZTc1Nzc3YWQ2NWIzNDc2Yzg4YmJkNjk2M2FlMWY5ODBmNj
cxMyIsIm5vbmNlIjoiLTEzNjc0ODEyMjAiLCJhY2NvdW50IjoieWVxcSIsInRpbWVzdGFtcCI6IjE2NTgxOTU2MjE4MjcifQ==
&redirect_uri=http%3A%2F%2F10. ##1.28.143:8094%2Fmoduleperation%21executeOperation%3FcomponentCode%
3Derp_loginframe%26windowCode%3Dindex",
"errorDetail":null,
"errorCode":null,
"isSuccess":true
},
"success":true
}

2. V-AppServer 单点登录第三方系统

2.1 场景说明

用于支持 A 系统(V-AppServer)单点登录到 B 系统(第三方服务)的功能,同时支持 A 系统单点登录到多个 B 系统。

A 系统单点登录 B 系统后,打开 B 系统中需登录权限的页面时,无需再输入 B 系统的账号密码,可直接打开。

info

在该登录场景中,父应用即系统A,子应用即系统B。

img

img

2.2 单点登录原理简述

A 系统为 V-AppServer ,B 系统为第三方系统。

  1. A 产生数字签名 login_sso :拼接B系统 bizSysIdbizSysSecret 、时间戳、随机数、账号等数据排序 SHA-1加密;

  2. A 携带参数请求B系统单点登录地址;

  3. B 系统解析参数 login_sso ,获得 时间戳、随机数、账号、 数字签名 sso_sig

  4. 根据本地保存的 bizSysId/bizSysSecret ,和 时间戳、随机数、账号 生成数字签名;

  5. 校验生成的数字签名与第三步获得的 sso_sig 是否一致;

  6. 根据账号或者其他参数转换 B 系统的用户信息;

  7. B 系统的用户信息登录;

  8. 跳转到回调地址。

2.3 第三方系统单点登录配置

B 系统为非 V3 系统,则需要自行实现接口。

接口地址第三方自定义接口地址bizSysRequestUrl,
如:http://10.10. ###1.128:8080/ssoLogin
入参redirect_uri单点登录回调地址(url编码)
login_sso登录信息(base64编码),由A系统生成
示例地址http://10.10. ###1.128:8080/ssoLogin?redirect_uri=xxxx&login_sso=xxxx

2.4 V-AppServer系统单点登录配置

A 系统保存第三方系统 B 单点登录必要信息,如下:

配置参数说明
  • bizSysId :系统唯一标识,用于生成数字签名,如:serverA
  • bizSysSecret :秘钥,用于生成数字签名,可用UUID或较为复杂的字符串;
  • bizSysRequestUrl :第三方单点登录接口地址;第三方自定义接口地址bizSysRequestUrl,如:http://10.10. ###1.128:8080/ssoLogin?redirect_uri=xxxx&login_sso=xxxx。

A 系统配置中心,设置【VBASE-单点登录】,选择其中一个第三方系统配置参数(支持多个单点登录系统)。

访问目录:配置中心 → 系统高级配置 → 系统维护 → 配置管理。

img

img

2.5 单点登录地址获取

VBase 在开发平台提供 API,获取配置管理的单点登录地址。

在父系统中调用构件方法:

构件编码:vbase_sso

方法编码:API_VSSOCreateSSOThirdPartyUrl

方法输入:

编码名称
redirectUri单点登录成功后目标地址(无需url编码)
bizSysId单点登录业务系统标识
additionalProps请求参数(附加参数)

方法输出:

编码名称
requestUrl单点登录地址(页面打开的链接地址)
isSuccess是否成功
errorDetail异常信息
errorCode错误编码

3. 第三方系统单点登录 V-AppServer

3.1 场景说明

B 系统单点登录 A 系统后,打开 A 系统中需登录权限的页面时,无需再输入 A 系统的账号密码,可直接打开。

img

3.2 V-AppServer系统单点登录配置

A 系统配置中心,设置 VBASE - 接收单点登录方配置。

访问目录:配置中心 → 系统高级配置 → 系统维护 → 配置管理。

配置参数说明
  • bizSysId :(必填)第三方系统唯一标示;

  • bizSysSecret :(必填)第三方系统与V执行系统共同持有的秘钥;

  • customLoginConvert :自定义登录信息转换,默认账号转换;

  • signature_valid : 数字签名有效期,单位:秒,默认600秒(10分钟);

  • signature_buff_time : 数字签名网络最大缓冲期,单位:秒,默认300秒(5分钟);

  • custom_login_executor :自定义登录执行器,默认vbase登录;

img

img

3.3 第三方系统 单点登录配置

第三方单点登录到V系统,需要构造V系统的单点登录地址;

格式如下:

http://服务地址/module-operation!executeOperation?operation= VSSOLogin & login_sso =xxxx& redirect_uri =xxxxx

示例:

http://V-AppServer服务地址/module-operation!executeOperation?operation= VSSOLogin & login_sso 
=eyJ0aW1lc3RhbXAiOiIxNTM3NDQ0MzM5OTYyIiwic3NvX3NpZyI6ImRhZDg0MzQ3YTQ1YTQ5NWQ3OTA1YWMxMThmNzc2OWQyZjViNWRmMWE
iLCJub25jZSI6Ii0xMzY3NDgxMjIwIiwidGVuYW50X2NvZGUiOiJUQU5HIiwiYWNjb3VudCI6ImFkbWluIn0=& redirect_uri =module-
operation%21executeOperation%3Foperation%3DForm%26componentCode%3Dlogined_page_test%26windowCode%3Dtest

参数说明:

(1) operation= VSSOLogin

V3执行系统默认单点登录接口,固定值:VSSOLogin

(2) login_sso

单点登录信息参数。

① 生成 sso _sig

构造说明:

  • bizSysId、 bizSysSecret 和本地生成的 timestamp、 nonce、account

  • 五个字符串进行 排序 —>拼接—>sha-1 加密得到 sso_sig 值。

注意事项: timestamp为毫秒级时间戳;nonce建议为4-6位随机数。

代码示例:

String[] array = new String[] { _bizSysId, bizSysSecret, loginName, timeStamp, nonce };
StringBuffer sb = new StringBuffer();
// 字符串排序
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
}
String sso_sig = null;
try {
sso_sig = CryptoUtils.hexSHA1(sb.toString());
} catch (Exception e) {
throw new UnexpectedException("使用sha-1进行编码错误!", e);
}

② 生成 login_sso

构造说明:

  • Map<String, String> 对象存储以上参数;

  • Map 转 Json 格式得到 Json 字符串;

  • Base64 编码 Json 字符串得到 login_sso 参数值。

代码示例:

Map<String, String> login_ssoMap = new HashMap<String, String>();
login_ssoMap.put("sso_sig", sso_sig);
login_ssoMap.put("timestamp", timeStamp);
login_ssoMap.put("nonce", nonce);
login_ssoMap.put("account", loginName);
if (null != additionalProps && !additionalProps.isEmpty()) {
additionalProps.remove("sso_sig");
additionalProps.remove("timestamp");
additionalProps.remove("nonce");
additionalProps.remove("account");
login_ssoMap.putAll(additionalProps);
}
String login_sso = JsonUtils.toJson(login_ssoMap);
try {
login_sso = CryptoUtils.encodeBASE64(login_sso);
} catch (Exception e) {
throw new UnexpectedException("使用BASE64加密错误!", e);
}

(3) redirect_uri

单点登录回调地址,即第三方系统单点登录V3执行系统最终跳转的地址。

注意: 回调地址需要 UTF-8 编码 URLEncode

4. V 系统单点登录自定义 EP 实现

img

4.1 自定义登录信息转换

如果默认的账号转换,无法满足业务需求,需要实现手机号转换本地登录信息,

实现EP扩展vbase_sso. EP_VSSO_CustomLoginConvert(EP_VSSO_自定义用户登录信息转换器)

实例操作步骤:

  1. 新建一个业务构件,引用 vbase_sso(VBASE-单点登录)

  2. 实现构件方法的方法扩展

  3. 实现本地用户登录信息转换逻辑

img

方法输入:

img

方法输出:

img

4.2 自定义登录执行器

如果默认的vbase登录无法满足业务需求,需要同时登录统一认证,可以自定义登录执行器;

实现EP扩展vbase_sso. EP_VSSO_CustomLoginExecustor(SPI_VSSO_自定义登录执行器)

  1. 新建一个业务构件,引用 vbase_sso(VBASE-单点登录)

  2. 实现构件方法的方法扩展

  3. 实现自定义登录逻辑

方法输入:

img

方法输出:

img

5. 单点登录到多租户系统的场景

img

系统 A 为普通V系统,系统 B 为多租户 V 系统。

此单点登录场景,父应用即系统A,子应用即系统B。

所有配置环节步骤与 V-AppServer单点登录到V系统 一致。

区别在于,多租户系统单点登录的地址获取:

构件编码:vbase_sso

方法编码:API_VSSOCreateSSOThirdPartyUrl

方法输入:

编码名称
redirectUri单点登录成功后目标地址(无需url编码)
bizSysId单点登录业务系统标识
additionalProps增加租户编码的附加属性propertyKey=”tenant_code”propertyValue=多租户系统租户编码

方法输出:

编码名称
requestUrl单点登录地址(页面打开的链接地址)
isSuccess是否成功
errorDetail异常信息
errorCode错误编码

6. 代码API

引入构件 com.toone.v3.platform-34vbase-sso-api-3.4.2

POM 代码构件依赖:

com.toone.v3.platform
34vbase-sso-api
3.9.0
bundle
provided

调用方式:

获取 VSSOManagerService :VSSOServiceFactory.getVSSOManagerService()

调用 Service 方法:createSSOThirdPartyUrl(bizSysId, redirectUri, additionalProps)

配置参数说明
  • bizSysId:业务系统标识;
  • redirectUri:单点登录成功后目标地址;
  • additionalProps :请求参数(附加参数)。