@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来生成用户身份,继而跳转到对应的页面里!
C#代码案例
var _user_ticket = AESHelper.AesEncrypt("张三", "16位秘钥");
//aes加密的结果有特殊字符,在url传递时需要urlencode下
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'
提供给需要方!