Exemple #1
0
        /// <summary>
        /// 向SSOManage站点发起校验令牌信息的请求
        /// </summary>
        /// <param name="ssoInfo">包含令牌信息的参数</param>
        /// <param name="timeOutMs">超时时间,单位为毫秒,默认为5000毫秒</param>
        /// <returns>如果验证成功返回true,否则返回false</returns>
        public static bool CheckSSOLoginState(SSOInfo ssoInfo, int timeOutMs = 5000)
        {
            if (ssoInfo == null || string.IsNullOrEmpty(ssoInfo.UserId) || string.IsNullOrEmpty(ssoInfo.Token))
            {
                return(false);
            }
            if (EnvProvider.Default.IsSSOManageSite)
            {
                LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, ssoInfo.UserId);
                if (handle != null)
                {
                    return(handle.Token == ssoInfo.Token);
                }
                return(false);
            }
            if (string.IsNullOrEmpty(EnvProvider.Default.SSOManageSiteUrl))
            {
                return(false);
            }
            try
            {
                string url   = string.Format("{0}/sysSvc/CheckSSOLoginState", EnvProvider.Default.SSOManageSiteUrl);
                var    postP = new
                {
                    ssoInfo = ssoInfo
                };
                string  errorInfo = string.Empty;
                dynamic result    = LibNetUtils.HttpPostCall <dynamic>(url, postP, out errorInfo, timeOutMs);

                if (string.IsNullOrEmpty(errorInfo) == false || result == null)
                {
                    return(false);
                }
                else
                {
                    // 私钥解密
                    string ret = LibRSAHelper.Decrypt((string)result.CheckSSOLoginStateResult);//对于直接返回基本类型的接口调用,结果会包装成方法名+Result
                    return(ret == "0");
                }
            }
            catch (Exception exp)
            {
                LibCommUtils.AddOutput("CrossSiteCall", string.Format("CheckSSOLoginState error:{0}\r\nStacktrace:{1}", exp.Message, exp.StackTrace));
                return(false);
            }
        }
Exemple #2
0
        /// <summary>
        /// 检查指定账户是否已以某个loginToken形式登录(SSO管理站点才有用)
        /// </summary>
        /// <param name="ssoInfo">包含用户账号、访问令牌等</param>
        /// <returns></returns>
        public string CheckSSOLoginState(SSOInfo ssoInfo)
        {
            string ret = "101";

            if (!EnvProvider.Default.IsSSOManageSite)
            {
                ret = "100";
            }
            else
            {
                LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, ssoInfo.UserId);
                if (handle != null && handle.Token == ssoInfo.Token)
                {
                    ret = "0";
                }
            }
            // 公钥加密
            ret = LibRSAHelper.Encrypt(ret);
            return(ret);
        }
Exemple #3
0
        /// <summary>
        /// 单点登录。
        /// 1.检查当前本站点系统账户中是否存在userId,如果否则不予登录
        /// 2.使用userId、loginToken等访问sso管理站点的CheckSSOLoginState方法检验是否已经SSO登录过。
        ///   如果未登录过则不予登录。
        /// 3.判断当前站点中userId是否已经登录过,如果是则使用对应的LibHandle信息返回,否则则新构造LibHande并返回。
        /// </summary>
        ///<param name="ssoInfo">单点登录信息</param>
        /// <returns></returns>
        public LoginInfo SSOLogin(SSOInfo ssoInfo)
        {
            LoginInfo loginInfo = new LoginInfo()
            {
                IsUsed = true, IsOverUser = false
            };

            SqlBuilder    builder    = new SqlBuilder("axp.User");
            string        sql        = builder.GetQuerySql(0, "A.PERSONID,A.PERSONNAME,A.ROLEID,A.WALLPAPER,A.WALLPAPERSTRETCH", string.Format("A.USERID={0} And A.ISUSE=1", LibStringBuilder.GetQuotString(ssoInfo.UserId)));
            LibDataAccess dataAccess = new LibDataAccess();
            string        roleId     = string.Empty;

            using (IDataReader reader = dataAccess.ExecuteDataReader(sql))
            {
                if (reader.Read())
                {
                    loginInfo.PersonId   = LibSysUtils.ToString(reader[0]);
                    loginInfo.PersonName = LibSysUtils.ToString(reader[1]);
                    roleId = LibSysUtils.ToString(reader[2]);
                    loginInfo.Wallpaper = LibSysUtils.ToString(reader[3]);
                    loginInfo.Stretch   = LibSysUtils.ToBoolean(reader[4]);
                    loginInfo.IsUsed    = false;
                }
                else
                {
                    return(loginInfo);
                }
            }
            if (CheckToken(ssoInfo))
            {
                // 授权成功
                LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, ssoInfo.UserId);
                if (handle == null)
                {
                    handle = LibHandleCache.Default.GetHandle(string.Empty, LibHandeleType.PC, ssoInfo.UserId, loginInfo.PersonId, loginInfo.PersonName, roleId);
                }
                loginInfo.Handle = handle.Handle;
                return(loginInfo);
            }
            return(loginInfo);
        }
Exemple #4
0
 private bool CheckToken(SSOInfo ssoInfo)
 {
     if (EnvProvider.Default.IsSSOManageSite)
     {
         LibHandle handle = LibHandleCache.Default.IsExistsHandle(LibHandeleType.PC, ssoInfo.UserId);
         if (handle != null)
         {
             if (handle.Token == ssoInfo.Token)
             {
                 return(true);
             }
         }
     }
     else
     {
         try
         {
             string  baseUrl   = EnvProvider.Default.SSOManageSiteUrl;
             string  url       = baseUrl + "/sysSvc/checkSSOLoginState";
             string  errorInfo = "";
             dynamic obj       = LibNetUtils.HttpPostCall <dynamic>(url, new { ssoInfo = ssoInfo }, out errorInfo);
             if (string.IsNullOrEmpty(errorInfo))
             {
                 string ret = LibRSAHelper.Decrypt(obj.CheckSSOLoginStateResult.Value);
                 if (ret == "0")
                 {
                     return(true);
                 }
             }
         }
         catch (Exception)
         {
             //throw;
         }
     }
     return(false);
 }