单点登录思路及案例:第三方系统单点登录K
单点登录思路及案例:第三方系统单点登录K
1 启用第三方系统登录授权 | 2 配置启动服务插件 在Kingdee\K3Cloud\WebSite\App_Data文件下,修改Common.config文件, 增加配置节 <add key ="StartAppPlugin" value="Kingdee.BOS.ServiceFacade.StartApp.MacVerify Kingdee.BOS.ServiceFacade.StartApp"/>3 在第三方系统中生成签名授权的URLSilverlight: http://xxxx/k3cloud/silverlight/index.aspx?ud=|dbid|username|appid|signeddata|timestamp[|lcid]协议内容解析参数格式:ud=|dbid|username|appid|signeddata|timestamp[|lcid],其中ud为参数名;协议格式:|dbid|username|appid|signeddata|timestamp[|lcid]dbid:数据中心的ID;username:用户名称;appid:应用程序ID,通过Administrator登录数据中心后,在【系统管理】分类的【第三方系统登录授权】功能里面进行新增维护;signeddata:数据签名串,通过公钥和用户数据进行运算得到timestamp:登录时间戳(Unix时间戳 定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数);lcid(可选):语言ID,中文2052(默认),英文1033,繁体3076.NET示例代码如下:using Kingdee.BOS.Authentication;usingKingdee.BOS.ServiceFacade.KDServiceClient.User;using Kingdee.BOS.Util;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{classProgram {staticvoidMain(string[] args) {intlcId = 2052;longtimestamp = DateTimeFormatUtils.CurrentTimeMillis()/1000;//时间戳stringdbId = "57b11d0f7a3b1a";//数据中心IDstringusserName = "ly";//用户名称stringappId = "SRMLightApp";//第三方系统应用IdstringappSecret = "7d9169bfbdc34e9cbd96069db5e72917";//第三方系统应用秘钥string[]arr = newstring[]{ dbId usserName appId appSecret timestamp.ToString() };stringsign = Kingdee.BOS.Util.SHA1Util.GetSignature(arr);//签名string urlPara= string.Format("|{0}|{1}|{2}|{3}|{4}|{5}" dbId usserName appId sign timestamp lcId);string url= http://localhost/K3Cloud/Silverlight/IndexSL.aspx?ud= urlPara;// Silverlight入口链接Console.ReadLine(); } }}SHA1签名算法 /// <summary> /// SHA1签名 /// </summary> /// <param name="arr"></param> /// <returns></returns> public static string GetSignature(string[] arr) { //1. 将数组进行排序 //2. 将数组拼接成一个字符串进行sha1加密 Array.Sort(arr StringComparer.Ordinal); var arrString = string.Join("" arr); var sha1 = SHA1.Create(); var sha1Arr = sha1.ComputeHash(Encoding.UTF8.GetBytes(arrString)); StringBuilder enText = new StringBuilder(); foreach (var b in sha1Arr) { enText.AppendFormat("{0:x2}" b); } return enText.ToString(); }4 在第三方系统根据生成的链接打开K/3CLOUD主界面 |