[关闭]
@myyzs 2020-05-13T09:08:27.000000Z 字数 2144 阅读 45

蓝陵兼容集成方案

蓝陵url追加登录用户信息


使用背景

云助手和蓝陵kk协商好的集成方案是在fdccloud.com域名下种植cookie,cookie的key为LtpaToken,value为用户的user_code通过算法加密后的结果
如:{LtpaToken:xxxxxxxxxxx}
在某些个性化情况下,需要在url上传递用户身份,来解决蓝陵的免登功能,故开发此方案!

实现原理

在原始的移动连接上追加参数_user_ticket=xxxxx
如:https://www.fdccloud.com/xxxx/xxx?_user_ticket=xxxxx
此时移动端如果需要免登的话,会取_user_ticket参数,进行解密来获取user_code来生成用户身份,继而跳转到对应的页面里!

_user_ticket生成规则

C#代码案例

var _user_ticket = AESHelper.AesEncrypt("张三", "16位秘钥");
//aes加密的结果有特殊字符,在url传递时需要urlencode下

AESHelper源码

 public class AESHelper
    {
        /// <summary>
        ///  AES 加密
        /// </summary>
        /// <param name="str"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string AesEncrypt(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
            var key2  = Encoding.UTF8.GetBytes(key);
            MD5 md5 = MD5.Create();
            byte[] rst = md5.ComputeHash(key2);
            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7,
            };

            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }

        /// <summary>
        ///  AES 解密
        /// </summary>
        /// <param name="str"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static string AesDecrypt(string str, string key)
        {
            if (string.IsNullOrEmpty(str)) return null;
            Byte[] toEncryptArray = Convert.FromBase64String(str);

            System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
            {
                Key = Encoding.UTF8.GetBytes(key),
                Mode = System.Security.Cryptography.CipherMode.ECB,
                Padding = System.Security.Cryptography.PaddingMode.PKCS7
            };

            System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
            Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

            return Encoding.UTF8.GetString(resultArray);
        }

    }

对二开重要

1.aes加密的结果会有特殊字符,如果在url传递时请urlencode编码

云助手同事注意

1.aes的秘钥需要16位,可以使用MD5 16为方法来生成,每个租户已经系统派发了秘钥,可以通过sql
select * from p_basic_params where param_code='landray_jc_aes_key'
提供给需要方!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注