YonSuite单点登录
hello,好久没更新了,近期公司信息化改革,都在搞用友的YonSuite。
近几天搞了下YonSuite单点登录用于内部工作使用,简单讲解下吧。目录
- 单点登录流程(BIP/YonSuite均适用)
- 单点登录开发
单点登录流程(BIP/YonSuite均适用)
简而言之,思路就是三部曲:
1、获取接口token(YonSuite内部调用时可跳过)
2、获取验证中心一次性code(需要传入系统用户唯一标识)
3、通过一次性code拼接地址跳转友互通验证登录
原地址在这
单点登录开发
这边开发我是采用了api的方式,按照以上思路我们先来看下“验证中心一次性code”的接口
字段说明:
thirdUcId是集成认证中心页面开放
userId是用户唯一标识就可以,一般可以传入手机号
开发代码(代码实例只供用友内部调用,原单点登录地址有外部JAVA实例)
letAbstractAPIHandler=require('AbstractAPIHandler');classMyAPIHandlerextendsAbstractAPIHandler{execute(request){try{//手机号varmobile=request.mobile;if(null==mobile||mobile.length==0){throw'手机号为空!';}mobile=mobile.replace('+86-','');//集成中心编码varthirdUcId='xxxx';//租户IDvartenantId='xxxx';//跳转URLvartargetUrl='https://xxxx.yonyoucloud.com';//登录页URLvarloginUrl='https://xxxx.yonyoucloud.com/login';//请求参数varrequestParam={thirdUcId:thirdUcId,userId:mobile,mobile:mobile};//集成认证中心获取登录临时codeletresult=openLinker('POST',ObjectStore.env().url+'/iuap-api-gateway/yonbip/yht/getThirdLoginCode','xxxx',JSON.stringify(requestParam));letresultJson=JSON.parse(result);if(null==result||null==resultJson||!resultJson.data||!resultJson.data.code){throw'集成认证中心获取登录临时code异常:'+JSON.stringify(result);}vartempCode=resultJson.data.code;//登录URL(https://euc.yonyoucloud.com/cas/thirdOauth2CodeLogin?thirdUCId={集成认证中心编码}&code={一次性code}&service=URLEncoder.encode("https://c3.yonyoucloud.com/login?tenantId=1233&service="+ URLEncoder.encode("{需要单点打开的BIP地址}"+ , "UTF-8"), "UTF-8"))varlastUrl='https://euc.yonyoucloud.com/cas/thirdOauth2CodeLogin?thirdUCId='+thirdUcId+'&code='+tempCode+'&service='+encodeURIComponent(loginUrl+'?tenantId='+tenantId+'&service='+encodeURIComponent(targetUrl));console.error(lastUrl);return{url:lastUrl};}catch(e){throwe;}return{};}}exports({entryPoint:MyAPIHandler});实现效果:
这边是做了个表单,通过点击当前行的登录按钮获取当前行的手机号码调用以上的用友封装的API代码
有问题也可以提出探讨~下次再会
