Browse Source

统一认证登陆,修改签名秘钥;

dev
luyan 2 years ago
parent
commit
9901aab515
  1. 8
      epmet-auth/src/main/java/com/epmet/constant/SsoConstant.java
  2. 25
      epmet-auth/src/main/java/com/epmet/controller/SsoController.java
  3. 71
      epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java

8
epmet-auth/src/main/java/com/epmet/constant/SsoConstant.java

@ -16,13 +16,21 @@ public interface SsoConstant {
String INSERT_UPDATE_USER_FAILURE = "新增或更新user_weChat失败......";
String USER_ID_IS_NULL = "userId为空,生成token失败......";
String CUSTOMER_ID_IS_NULL = "customerId为空,缓存放置token失败......";
/**
* 日照 Ticket 校验接口地址SSO调用
*/
String TICKET_TOKEN_URL = "https://sso.shuzirizhao.cn/sso/checkTicket";
/**
* 日照 获取登陆身份信息
*/
String USER_INFO_URL = "https://sso.shuzirizhao.cn/sso/userinfo";
/**
* 签名秘钥
*/
String SECRET_KEY = "YQfyZtAmDbYHTBaHPSx3GZeX7x2ip7ik";
}

25
epmet-auth/src/main/java/com/epmet/controller/SsoController.java

@ -11,12 +11,10 @@ import com.epmet.service.SsoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Map;
/**
* @Author zxc
@ -91,12 +89,21 @@ public class SsoController {
return new Result<UserTokenResultDTO>().ok(userTokenResultDTO);
}
@PostMapping("checkTicket")
public Result ssoCheckTicket(@RequestBody SsoCheckTicketFormDTO form) throws IOException {
if (StringUtils.isEmpty(form.getTicket())) {
return new Result().ok(ssoService.checkTicket(form));
@GetMapping("checkTicket")
public Result ssoCheckTicket(@RequestParam Map<String, String> params) throws IOException {
SsoCheckTicketFormDTO form = new SsoCheckTicketFormDTO();
if (StringUtils.isNotEmpty(params.get("ticket"))) {
form.setTicket(params.get("ticket"));
} else {
return new Result().error(-1, "登陆失败,请联系管理员!");
}
return new Result().error(-1,"登陆失败,请联系管理员!");
if (StringUtils.isNotEmpty(params.get("ssoLogoutCall"))) {
form.setSsoLogoutCall(params.get("ssoLogoutCall"));
}
if (StringUtils.isNotEmpty(params.get("client"))) {
form.setSsoLogoutCall(params.get("client"));
}
return new Result().ok(ssoService.checkTicket(form));
}
}

71
epmet-auth/src/main/java/com/epmet/service/impl/SsoServiceImpl.java

@ -1,5 +1,7 @@
package com.epmet.service.impl;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.epmet.auth.constants.AuthOperationConstants;
@ -46,6 +48,7 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
@ -83,7 +86,7 @@ public class SsoServiceImpl implements SsoService {
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
@Autowired
@Resource
private EpmetUserFeignClient epmetUserFeignClient;
@Value("${epmet.third.urlPrefix}")
@ -220,13 +223,15 @@ public class SsoServiceImpl implements SsoService {
if (result.getString("code").equals("200")) {
String ticket = result.getString("data");
String timestamp = String.valueOf(System.currentTimeMillis());
String nonce = RandomUtil.randomString(18);
httpPost = new HttpPost(SsoConstant.USER_INFO_URL);
infoJson = new JSONObject();
infoJson.put("loginId", ticket);
infoJson.put("timestamp", timestamp);
infoJson.put("nonce", "");
infoJson.put("sign", "");
stringEntity = new StringEntity(infoJson.toString(), "UTF-8");
infoJson.put("nonce", nonce);
infoJson.put("sign", Md5Params(ticket, timestamp, nonce));
String params = DigestUtils.md5Hex(infoJson.toString().getBytes(StandardCharsets.UTF_8));
stringEntity = new StringEntity(params, "UTF-8");
stringEntity.setContentEncoding("UTF-8");
stringEntity.setContentType(MediaType.APPLICATION_JSON_VALUE);
httpPost.setEntity(stringEntity);
@ -302,6 +307,24 @@ public class SsoServiceImpl implements SsoService {
return userTokenResultDTO;
}
/**
* 签名
*
* @param loginId
* @return
*/
private String Md5Params(String loginId, String timestamp, String nonce) {
String prefix = "=${";
String suffix = "}&";
StringBuilder builder = new StringBuilder();
builder.append("loginId").append(prefix).append(loginId).append(suffix);
builder.append("nonce").append(prefix).append(nonce).append(suffix);
builder.append("timestamp").append(prefix).append(timestamp).append(suffix);
builder.append("key").append("={").append(SsoConstant.SECRET_KEY).append("}");
return SecureUtil.md5(builder.toString());
}
/**
* @Description token放缓存
* @Param formDTO
@ -657,24 +680,24 @@ public class SsoServiceImpl implements SsoService {
}
public static void main(String[] args) {
String url = "https://epmet-ext9.elinkservice.cn/platform/unifiedAuth/loginCheck";
String platformToken = "1348803062424166401_dd08e23b0d524879a5c67e7f2ffd1468";
String appId = "7a5aec009ba4eba8e254ee64fe3775e1";
String appKey = "14faef9af508d1c253b720ea5a43f9de";
String appSecret = "38e7c2604c8dd33c445705d25eebbfc12a2f7ed8a87111e9e10a40312d3a1595";
long ts = System.currentTimeMillis();
String message = appId + appKey + appSecret + ts;
String accessToken = DigestUtils.md5Hex(message.getBytes(StandardCharsets.UTF_8));
//ThirdPlatformEnum platformEnum = ThirdPlatformEnum.getEnum("pyld");
JSONObject jsonObject = new JSONObject();
jsonObject.put("platformToken", platformToken);
Map<String, Object> headerMap = new HashMap<>(4);
headerMap.put("AppKey", appKey);
headerMap.put("Timestamp", ts);
headerMap.put("AccessToken", accessToken);
Result<String> stringResult = HttpClientManager.getInstance().sendPost(url, url.startsWith("https://"), jsonObject.toJSONString(), headerMap);
System.out.println(stringResult);
}
// public static void main(String[] args) {
// String url = "https://epmet-ext9.elinkservice.cn/platform/unifiedAuth/loginCheck";
// String platformToken = "1348803062424166401_dd08e23b0d524879a5c67e7f2ffd1468";
// String appId = "7a5aec009ba4eba8e254ee64fe3775e1";
// String appKey = "14faef9af508d1c253b720ea5a43f9de";
// String appSecret = "38e7c2604c8dd33c445705d25eebbfc12a2f7ed8a87111e9e10a40312d3a1595";
// long ts = System.currentTimeMillis();
// String message = appId + appKey + appSecret + ts;
// String accessToken = DigestUtils.md5Hex(message.getBytes(StandardCharsets.UTF_8));
// //ThirdPlatformEnum platformEnum = ThirdPlatformEnum.getEnum("pyld");
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("platformToken", platformToken);
//
// Map<String, Object> headerMap = new HashMap<>(4);
// headerMap.put("AppKey", appKey);
// headerMap.put("Timestamp", ts);
// headerMap.put("AccessToken", accessToken);
// Result<String> stringResult = HttpClientManager.getInstance().sendPost(url, url.startsWith("https://"), jsonObject.toJSONString(), headerMap);
// System.out.println(stringResult);
// }
}

Loading…
Cancel
Save