You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
2.5 KiB

package com.fr.plugin.xx.sso.util;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.http.HttpGlobalConfig;
import cn.hutool.http.HttpUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.fr.json.JSONObject;
import com.fr.plugin.xx.sso.conf.PortalSsoConfig;
import java.util.Map;
/**
* @author xx
*/
public class CallUtil {
/**
* @param code
*/
public static String call(String code) {
String account = "", userCode, accountName, certNumber;
PortalSsoConfig authConfig = PortalSsoConfig.getInstance();
Map<String, Object> paramMap = MapUtil.newHashMap(5);
paramMap.put("grant_type", "authorization_code");
paramMap.put("code", code);
paramMap.put("client_id", authConfig.getClientId());
paramMap.put("client_secret", authConfig.getClientSecret());
paramMap.put("redirect_uri", authConfig.getRedirectUri());
try {
HttpGlobalConfig.setTimeout(6000);
String rsp = HttpUtil.post(authConfig.getMethodGetAccessToken(), paramMap);
LogUtils.debug4plugin("get url {} param is {} account res is {}",authConfig.getMethodGetAccessToken(),paramMap,rsp);
if (ObjectUtil.isNotEmpty(rsp)) {
JSONObject hashMap = new JSONObject(rsp);
if (0 == (int) hashMap.get("code")) {
RSA rsa = new RSA(authConfig.getPrivateKey(), null);
String decryptStr = rsa.decryptStr((String) hashMap.get("data"), KeyType.PrivateKey);
JSONObject map = new JSONObject(decryptStr);
//解析 accessToken
DecodedJWT decodeToken = JWT.decode((String) map.get("access_token"));
//获取门户帐号信息
//account = decodeToken.getClaim("account").asString();
//获取门户UID信息
account = decodeToken.getClaim("userCode").asString();
//获取门户姓名信息
//accountName = decodeToken.getClaim("accountName").asString();
//获取门户证件信息
//certNumber = decodeToken.getClaim("certNumber").asString();
}
}
} catch (Exception e) {
LogUtils.error("调用门户code换取token异常{}", e.getMessage());
}
return account;
}
}