@myyzs
2020-06-08T08:49:44.000000Z
字数 2866
阅读 77
获取用户信息接口
1.应用在需要登录的时候跳转到云助手链接地址上,云助手首先验证TICKET的合法性,验证通过后,会根据参数和当前用户环境获取到用户信息,然后通过AES加密用户信息,拼接到REDIRECT_URL?user_info=xxxxxx,重新跳转到应用的地址上面,应用通过解密用户信息,实现应用的免登.
https://www.fdccloud.com/api/yzs-sdk/get-user?tenant_id=TENANT_ID&from=FROM&app_code=APP_CODE&channel_id=CHANNEL_ID&time=TIME&ticket=TICKET&redirect_url=REDIRECT_URL
参数 | 说明 |
---|---|
TENANT_ID | 云助手租户的tenant_id,唯一值 |
FROM | 使用的app环境常用的有wzs(云助手),dingtalk(钉钉),wx(企业微信) |
APP_CODE | 做集成的应用code |
CHANNEL_ID | 渠道ID,用来获取对应的组织架构的用户,选项值有 -2:获取企业通讯录的用户信息;-1:获取当前域用户的信息;0 :获取当前erp的用户信息;2:云服务;3:云采购;4:项目跟投;5:工程协同;6:云客;7:云空间; |
TIME | 时间戳(秒) |
TICKET | 身份票据,用来检测请求参数的合法性 |
REDIRECT_URL | 重定向地址,在云助手获取完用户信息后会重新跳转到此地址,在此地址后面追加user_info参数,应用通过AES解密此参数可以获取用户信息 |
拼接字符串 string = TENANT_ID+APP_CODE+CHANNEL_ID+FROM+TIME;
然后使用Aes加密,秘钥为云助手分配给应用的秘钥
最后把Aes加密的结果使用md5加密
php代码如下
$string = $tenantId.$appCode.$channelId.$from.$time;
$ticket = md5(AesHelper::encrypt($string,$appSecret));
REDIRECT_URL?user_info=xxxxxx,应用在REDIRECT_URL的程序中通过GET方法获取到user_info参数,然后使用Aes方法,应用的秘钥来解密。最后解析json即可获得用户信息!
php代码如下:
$userInfo = I('user_info');
$user = json_decode(YzsSdk\helpers\AesHelper::decrypt($userInfo,APP_SECRET),true);
/*** user的里内容
* [
* "user_guid"=>"xxxx",
* "user_code"=>"zhangsan",
* "user_name"=>"张三"
* ]
*
*/
public class AESHelper
{
private static readonly string pass = "1234";
public static string AES_Encrypt(string input)
{
return AESHelper.AES_Encrypt(input, AESHelper.pass);
}
public static string AES_Decrypt(string input)
{
return AESHelper.AES_Decrypt(input, AESHelper.pass);
}
public static string AES_Encrypt(string input, string pass)
{
RijndaelManaged rijndaelManaged = new RijndaelManaged();
MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
string result;
try
{
byte[] array = new byte[32];
byte[] sourceArray = mD5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(pass));
Array.Copy(sourceArray, 0, array, 0, 16);
Array.Copy(sourceArray, 0, array, 15, 16);
rijndaelManaged.Key = array;
rijndaelManaged.Mode = CipherMode.ECB;
ICryptoTransform cryptoTransform = rijndaelManaged.CreateEncryptor();
byte[] bytes = Encoding.UTF8.GetBytes(input);
string text = Convert.ToBase64String(cryptoTransform.TransformFinalBlock(bytes, 0, bytes.Length));
result = text;
}
catch (Exception)
{
result = "";
}
return result;
}
public static string AES_Decrypt(string input, string pass)
{
RijndaelManaged rijndaelManaged = new RijndaelManaged();
MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
string result;
try
{
byte[] array = new byte[32];
byte[] sourceArray = mD5CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(pass));
Array.Copy(sourceArray, 0, array, 0, 16);
Array.Copy(sourceArray, 0, array, 15, 16);
rijndaelManaged.Key = array;
rijndaelManaged.Mode = CipherMode.ECB;
ICryptoTransform cryptoTransform = rijndaelManaged.CreateDecryptor();
byte[] array2 = Convert.FromBase64String(input);
string @string = Encoding.UTF8.GetString(cryptoTransform.TransformFinalBlock(array2, 0, array2.Length));
result = @string;
}
catch (Exception)
{
result = "";
}
return result;
}
}