|
@@ -0,0 +1,207 @@
|
|
|
+package com.dragoninfo.dcuc.auth.business.impl.zerotrust;
|
|
|
+
|
|
|
+import com.dragoninfo.dcuc.auth.config.zerotrust.DcucAuthZerotrustConfig;
|
|
|
+import com.dragoninfo.dcuc.auth.token.vo.AppTokenInfoRespVO;
|
|
|
+import com.dragoninfo.dcuc.auth.token.vo.UserTokenInfoRespVO;
|
|
|
+import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
|
|
|
+import com.dragonsoft.smtools.enums.SmTypeEunm;
|
|
|
+import com.dragonsoft.smtools.loader.SMFactory;
|
|
|
+import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
+import com.github.dreamhead.moco.HttpServer;
|
|
|
+import com.github.dreamhead.moco.Runner;
|
|
|
+import lombok.SneakyThrows;
|
|
|
+import org.junit.AfterClass;
|
|
|
+import org.junit.Assert;
|
|
|
+import org.junit.BeforeClass;
|
|
|
+import org.junit.Test;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.Locale;
|
|
|
+
|
|
|
+import static com.github.dreamhead.moco.Moco.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author mazq
|
|
|
+ * @date 2023/7/14
|
|
|
+ */
|
|
|
+public class TokenRemoteCallBusinessImplTest {
|
|
|
+// public static void main(String[] args) {
|
|
|
+//// try {
|
|
|
+//// TokenRemoteCallBusinessImplTest.before();
|
|
|
+//// } catch (Exception e) {
|
|
|
+//// e.printStackTrace();
|
|
|
+//// }
|
|
|
+//// }
|
|
|
+
|
|
|
+ public static Runner runner;
|
|
|
+
|
|
|
+
|
|
|
+ static String identityUrl = "http://127.0.0.1:19000";
|
|
|
+ static String appInfoUrl = "/idp/rest/getAppTokenInfo";
|
|
|
+ static String userInfoUrl = "/idp/rest/getUserTokenInfo";
|
|
|
+
|
|
|
+ static TokenRemoteCallBusinessImpl tokenRemoteCallBusiness;
|
|
|
+
|
|
|
+ @BeforeClass
|
|
|
+ public static void before() throws Exception {
|
|
|
+ HttpServer httpServer = httpServer(19000, log());
|
|
|
+
|
|
|
+ httpServer.request(by(uri(appInfoUrl)))
|
|
|
+ .response(pathResource("bim/getAppTokenInfo.json"));
|
|
|
+
|
|
|
+
|
|
|
+ httpServer.request(by(uri(userInfoUrl)))
|
|
|
+ .response(pathResource("bim/getUserTokenInfo.json"));
|
|
|
+
|
|
|
+
|
|
|
+ runner = Runner.runner(httpServer);
|
|
|
+
|
|
|
+ runner.start();
|
|
|
+
|
|
|
+ SkipSslVerificationHttpRequestFactory skipSslVerificationHttpRequestFactory
|
|
|
+ = new SkipSslVerificationHttpRequestFactory();
|
|
|
+ skipSslVerificationHttpRequestFactory.setReadTimeout(5000);
|
|
|
+ skipSslVerificationHttpRequestFactory.setConnectTimeout(5000);
|
|
|
+ RestTemplate restTemplate = new RestTemplate(skipSslVerificationHttpRequestFactory);
|
|
|
+ DcucAuthZerotrustConfig config = new DcucAuthZerotrustConfig();
|
|
|
+
|
|
|
+ String appTokenUrl = identityUrl + appInfoUrl;
|
|
|
+ String userTokenUrl = identityUrl + userInfoUrl;
|
|
|
+ config.setAppTokenQueryUrl(appTokenUrl);
|
|
|
+ config.setUserTokenQueryUrl(userTokenUrl);
|
|
|
+
|
|
|
+ ObjectMapper objectMapper = new ObjectMapper();
|
|
|
+ // 忽略不对应的字段
|
|
|
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
|
+
|
|
|
+ SMFactory smFactory = SMFactory.init(SmTypeEunm.Local);
|
|
|
+
|
|
|
+ tokenRemoteCallBusiness = new TokenRemoteCallBusinessImpl();
|
|
|
+ tokenRemoteCallBusiness.setRestTemplate(restTemplate);
|
|
|
+ tokenRemoteCallBusiness.setZerotrustConfig(config);
|
|
|
+ tokenRemoteCallBusiness.setObjectMapper(objectMapper);
|
|
|
+ tokenRemoteCallBusiness.setSmFactory(smFactory);
|
|
|
+ }
|
|
|
+
|
|
|
+ @AfterClass
|
|
|
+ public static void stop() {
|
|
|
+ runner.stop();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getUserTokenInfo() {
|
|
|
+ String appTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ";
|
|
|
+ UserTokenInfoRespVO userTokenInfo = tokenRemoteCallBusiness.getUserTokenInfo(appTokenId);
|
|
|
+
|
|
|
+ Assert.assertNotNull(userTokenInfo);
|
|
|
+ Assert.assertEquals("zhanpeng", userTokenInfo.getName());
|
|
|
+ Assert.assertEquals("zhanpeng", userTokenInfo.getPid());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void getAppTokenInfo() {
|
|
|
+
|
|
|
+ String appTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ";
|
|
|
+ AppTokenInfoRespVO appTokenInfo = tokenRemoteCallBusiness.getAppTokenInfo(appTokenId);
|
|
|
+
|
|
|
+ Assert.assertNotNull(appTokenInfo);
|
|
|
+ Assert.assertEquals("demo1", appTokenInfo.getAppId());
|
|
|
+
|
|
|
+ Assert.assertEquals(appTokenId, appTokenInfo.getAppTokenId());
|
|
|
+ UserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
|
|
|
+ String userTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwODU4LCJleHAiOjE2ODk0MDI4NTgsInR5cGUiOiJ1c2VyIiwiSUQiOiJiM2ViMzNkMi1iMjQzLTRhZDgtODlmMS05MmQ3OWMxY2M1MTciLCJyZW1vdGVJcCI6IjEyNy4wLjAuMSIsInNlc3Npb25JZCI6IjYwMDM3YjdiZGI4YjU0NjFhYmJhZjkzYTljNWQ2YjUzIiwidWlkIjoiMjAyMjExMjkxNjExMjQyNzUtNTUwQi1DQ0E3QUQ0QTQiLCJvcmdhbml6YXRpb25Db2RlIjoiYmFtYm9vY2xvdWQiLCJkZXZPbmx5SWQiOiIiLCJlcXVpcG1lbnRUeXBlIjoicGMifQ.opQczo6NVMuafO2ruKCCpT1YdrsKLP2vlUnETyPR8Al-CijmIgqE0oW_BkOJaCP_UX-BYLLhoPBDFriI5IrLMg";
|
|
|
+
|
|
|
+ Assert.assertEquals(userTokenId, userToken.getUserTokenId());
|
|
|
+ Assert.assertEquals("", userToken.getMid());
|
|
|
+ Assert.assertEquals("362428199108047711", userToken.getPid());
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkUserTokenSign() {
|
|
|
+ HashMap<String, Object> stringObjectHashMap = new HashMap<>();
|
|
|
+ stringObjectHashMap.put("userTokenId", "1111111111111111");
|
|
|
+ stringObjectHashMap.put("createTime", "2023-05-30 17:32:45");
|
|
|
+ stringObjectHashMap.put("expireAt", "2023-05-30 19:32:45");
|
|
|
+ stringObjectHashMap.put("pid", "test");
|
|
|
+ stringObjectHashMap.put("orgCode", "1111");
|
|
|
+ stringObjectHashMap.put("ip", "127.0.0.1");
|
|
|
+ stringObjectHashMap.put("mid", "2222");
|
|
|
+ stringObjectHashMap.put("env", "pc");
|
|
|
+ stringObjectHashMap.put("sign", "4023c48d904bb2f908d5be02c867d5bbc1fe8ec590f583c76f970d3feff309a7");
|
|
|
+
|
|
|
+ boolean checkUserTokenSign = tokenRemoteCallBusiness.checkUserTokenSign(stringObjectHashMap);
|
|
|
+ Assert.assertTrue(checkUserTokenSign);
|
|
|
+
|
|
|
+ stringObjectHashMap.put("env", "1222");
|
|
|
+ boolean checkUserTokenSign1 = tokenRemoteCallBusiness.checkUserTokenSign(stringObjectHashMap);
|
|
|
+ Assert.assertFalse(checkUserTokenSign1);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void checkAppTokenSign() {
|
|
|
+ HashMap<String, Object> stringObjectHashMap = new HashMap<>();
|
|
|
+ stringObjectHashMap.put("appTokenId", "9999999999999999");
|
|
|
+ stringObjectHashMap.put("createTime", "2023-05-30 17:32:45");
|
|
|
+ stringObjectHashMap.put("expireAt", "2023-05-30 19:32:45");
|
|
|
+ stringObjectHashMap.put("appId", "demo");
|
|
|
+ stringObjectHashMap.put("userToken", "{createTime=2023-05-30 17:32:45, orgCode=1111, ip=127.0.0.1, name=test, " +
|
|
|
+ "mid=2222, pid=test, userTokenId=1111111111111111, expireAt=2023-05-30 19:32:45, env=pc}");
|
|
|
+ stringObjectHashMap.put("sign", "d5ff15ed7fed7fcd2d7c1bb826c2e6e44d58d6c2aaf134f8398259f5a58b62ee");
|
|
|
+
|
|
|
+ boolean checkUserTokenSign = tokenRemoteCallBusiness.checkAppTokenSign(stringObjectHashMap);
|
|
|
+ Assert.assertTrue(checkUserTokenSign);
|
|
|
+
|
|
|
+ stringObjectHashMap.put("appId", "1222");
|
|
|
+ boolean checkUserTokenSign1 = tokenRemoteCallBusiness.checkAppTokenSign(stringObjectHashMap);
|
|
|
+ Assert.assertFalse(checkUserTokenSign1);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void generalAppTokenCheckUserTokenString() {
|
|
|
+ LinkedHashMap<String, Object> stringStringLinkedHashMap = new LinkedHashMap<>();
|
|
|
+ stringStringLinkedHashMap.put("createTime", "2023-05-30 17:32:45");
|
|
|
+ stringStringLinkedHashMap.put("orgCode", "1111");
|
|
|
+ stringStringLinkedHashMap.put("ip", "127.0.0.1");
|
|
|
+ stringStringLinkedHashMap.put("name", "test");
|
|
|
+ stringStringLinkedHashMap.put("mid", "2222");
|
|
|
+ stringStringLinkedHashMap.put("pid", "test");
|
|
|
+ stringStringLinkedHashMap.put("userTokenId", "1111111111111111");
|
|
|
+ stringStringLinkedHashMap.put("expireAt", "2023-05-30 19:32:45");
|
|
|
+ stringStringLinkedHashMap.put("env", "pc");
|
|
|
+
|
|
|
+ String checkUserTokenString = tokenRemoteCallBusiness.generalAppTokenCheckUserTokenString(stringStringLinkedHashMap);
|
|
|
+ String truString = "{createTime=2023-05-30 17:32:45, orgCode=1111, ip=127.0.0.1, name=test, mid=2222, pid=test, userTokenId=1111111111111111, expireAt=2023-05-30 19:32:45, env=pc}";
|
|
|
+ Assert.assertEquals(truString, checkUserTokenString);
|
|
|
+ }
|
|
|
+
|
|
|
+ @SneakyThrows
|
|
|
+ @Test
|
|
|
+ public void userTokenSign() {
|
|
|
+ String userTokenId = "userTokenId-1";
|
|
|
+ String createTime = "2023-07-14 00:00:00";
|
|
|
+ String expireAt = "2023-07-15 00:00:00";
|
|
|
+ String pid = "420321196906089886";
|
|
|
+ String orgCode = "440100000000";
|
|
|
+ String ip = "127.0.0.1";
|
|
|
+ String mid = "1";
|
|
|
+ String env = "pc";
|
|
|
+ SMFactory smFactory = SMFactory.init(SmTypeEunm.Local);
|
|
|
+ String origin = "userTokenId=" + userTokenId +
|
|
|
+ "&createTime=" + createTime + "&expireAt=" + expireAt + "&pid=" + pid + "&orgCode=" + orgCode
|
|
|
+ + "&ip=" + ip + "&mid=" + mid + "&env=" + env;
|
|
|
+ System.out.println("用户令牌校验签名签名原文:" + origin);
|
|
|
+
|
|
|
+ String generalSign = smFactory.getSM3().summary(origin).toString().toLowerCase(Locale.ROOT);
|
|
|
+
|
|
|
+ System.out.println("用户令牌签名值" + generalSign);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|