提交 4bf5277b 编写于 作者:  Peijun.zhao's avatar Peijun.zhao

appleLoginfix

上级 8bdb779e
流水线 #22176 已失败 于阶段
in 0 second
...@@ -71,6 +71,14 @@ public class AutoCodeController extends AccountBaseController { ...@@ -71,6 +71,14 @@ public class AutoCodeController extends AccountBaseController {
} }
/**
* @Description native获取验证码,新老版本兼容 todo joy
* @Author peijun.zhao
* @Date 2020/2/28 9:55
* @ModifyDate 2020/2/28 9:55
* @Params [entity, req]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
@ApiOperation("获取短信验证码,无需图形验证码,如app端") @ApiOperation("获取短信验证码,无需图形验证码,如app端")
@PostMapping(value = "/authCode") @PostMapping(value = "/authCode")
public PicaResponse getAuthCode(@RequestBody EncryptEntity entity, HttpServletRequest req) throws Exception { public PicaResponse getAuthCode(@RequestBody EncryptEntity entity, HttpServletRequest req) throws Exception {
...@@ -96,6 +104,14 @@ public class AutoCodeController extends AccountBaseController { ...@@ -96,6 +104,14 @@ public class AutoCodeController extends AccountBaseController {
} }
} }
/**
* @Description web获取效验码-老版,记录风控行为 todo joy
* @Author peijun.zhao
* @Date 2020/2/28 9:52
* @ModifyDate 2020/2/28 9:52
* @Params [entity]
* @Return com.pica.cloud.foundation.entity.PicaResponse<java.lang.String>
*/
@ApiOperation("获取短信验证码,需要图形验证码,如H5端和PC端;验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机 4重置密码 5忘记密码 7患者招募提交问卷(效验)") @ApiOperation("获取短信验证码,需要图形验证码,如H5端和PC端;验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机 4重置密码 5忘记密码 7患者招募提交问卷(效验)")
@PostMapping("/account/authCode") @PostMapping("/account/authCode")
public PicaResponse<String> getAuthCodeWithCaptcha(@RequestBody EncryptEntity entity, public PicaResponse<String> getAuthCodeWithCaptcha(@RequestBody EncryptEntity entity,
......
...@@ -32,6 +32,7 @@ import com.pica.cloud.foundation.entity.PicaResultCode; ...@@ -32,6 +32,7 @@ import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.entity.PicaWarnException; import com.pica.cloud.foundation.entity.PicaWarnException;
import com.pica.cloud.foundation.redis.ICacheClient; import com.pica.cloud.foundation.redis.ICacheClient;
import com.pica.cloud.foundation.utils.utils.ValidateUtils; import com.pica.cloud.foundation.utils.utils.ValidateUtils;
import com.pica.cloud.foundation.utils.utils.json.JsonUtils;
import com.pica.cloud.patient.smartcontract.common.utils.HttpClientCloudUtils; import com.pica.cloud.patient.smartcontract.common.utils.HttpClientCloudUtils;
import io.jsonwebtoken.*; import io.jsonwebtoken.*;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
...@@ -43,7 +44,10 @@ import org.springframework.beans.factory.annotation.Value; ...@@ -43,7 +44,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigInteger;
import java.security.KeyFactory;
import java.security.PublicKey; import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -650,28 +654,41 @@ public class LoginServiceImpl implements LoginService { ...@@ -650,28 +654,41 @@ public class LoginServiceImpl implements LoginService {
String appleResp = null; String appleResp = null;
try { try {
appleResp = HttpClientCloudUtils.getHttpExecute(Constants.APPLE_GET_PUBLIC_KEY_URL); appleResp = HttpClientCloudUtils.getHttpExecute(Constants.APPLE_GET_PUBLIC_KEY_URL);
//logger.info("checkIdentifyToken-appleResp:{}", appleResp); logger.info("checkIdentifyToken-appleResp:{}", appleResp);
} catch (Exception e) { } catch (Exception e) {
logger.info("checkIdentifyToken-get apple public key fail " + e.getMessage()); logger.info("checkIdentifyToken-get apple public key fail " + e.getMessage());
throw new PicaException("get apple public key fail Exception", "get apple public key fail"); throw new PicaException("get apple public key fail Exception", "get apple public key fail");
} }
JSONObject jsonObject = JSONObject.parseObject(appleResp); JSONObject appleRespJson = JSONObject.parseObject(appleResp);
String keys = jsonObject.getString("keys"); String keys = appleRespJson.getString("keys");
JSONArray arr = JSONObject.parseArray(keys); JSONArray keysArr = JSONObject.parseArray(keys);
JSONObject jsonObject1 = JSONObject.parseObject(arr.getString(0));
logger.info("checkIdentifyToken-jsonObject1:{}", jsonObject1); if (identifyToken.split("\\.").length < 2) {
throw new PicaException("get identifyToken fail Exception", "get identifyToken format Exception");
}
JSONObject useAppleAuth = new JSONObject();
String inAuth = new String(Base64.decodeBase64(identifyToken.split("\\.")[0]));
String inKid = JSONObject.parseObject(inAuth).get("kid").toString();
for(Object obj : keysArr){
JSONObject appleAuth = JSONObject.parseObject(obj.toString());
if(inKid.equals(appleAuth.getString("kid"))){
useAppleAuth = appleAuth;
logger.info("checkIdentifyToken-jsonObject1:{}", useAppleAuth);
break;
}
}
// 通过架包生成publicKey // 通过jar生成publicKey
PublicKey publicKey; PublicKey publicKey;
try { try {
Jwk jwa = Jwk.fromValues(jsonObject1); Jwk jwa = Jwk.fromValues(useAppleAuth);
publicKey = jwa.getPublicKey(); publicKey = jwa.getPublicKey();
} catch (Exception e) { } catch (Exception e) {
logger.info("checkIdentifyToken-generate publicKey fail " + e.getMessage()); logger.info("checkIdentifyToken-generate publicKey fail " + e.getMessage());
throw new PicaException("checkIdentifyToken-generate publicKey fail", "generate publicKey fail"); throw new PicaException("checkIdentifyToken-generate publicKey fail", "generate publicKey fail");
} }
// 分割前台传过来的identifyToken(jwt格式的token)用base64解码使用 // 分割前台传过来的identifyToken(jwt格式的token)用base64解码使用
if (identifyToken.split("\\.").length > 1) {
String aud; String aud;
String sub; String sub;
try { try {
...@@ -686,14 +703,20 @@ public class LoginServiceImpl implements LoginService { ...@@ -686,14 +703,20 @@ public class LoginServiceImpl implements LoginService {
throw new PicaException("checkIdentifyToken-token decode fail Exception", "token decode fail"); throw new PicaException("checkIdentifyToken-token decode fail Exception", "token decode fail");
} }
return this.verify(publicKey, identifyToken, aud, sub, request); return this.verify(publicKey, identifyToken, aud, sub, request);
} // return false;
return false;
} }
public static void main(String[] args) throws InvalidPublicKeyException { public static void main(String[] args) throws InvalidPublicKeyException {
String jwt = "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MjE2NSwiaWF0IjoxNTgyNzgxNTY1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ing1b3lsbXRCdG9XRy02eFVzakRNRUEiLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODE1NjUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.QKybdVM-1cQBNYeVzYvoQY8rc2ZdRAeq8dJQqbd0zagkmz8X9eoVoKvLxI-cO09bbpRAGMv7Bz-bVcIDgUjIxhxudInmhU2vltfYGEt5meKHjsgKg_qdjyK_WC_bG3N-LhfHUhiA1n3rU0owSxVOWdBxmnYZhftjMd2kGphY-leVPYMoUJRKPteJAMx-F8er1L9nBkrfazoE61Y5GR_y8qtdVFIqlo9oPEGlb1qUC7A4kSGp5OVb4vRvWiqQj7MTjsYIGfqUWQmnkoA7dvlCpbiHdel3Lq6UexS4XzC_FBYC7ekBFU1EO-5rFUflhzmxepPnD8S51eS1CO0ProwwOA"; String jwt = "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ." +
"eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MjE2NSwiaWF0IjoxNTgyNzgxNTY1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ing1b3lsbXRCdG9XRy02eFVzakRNRUEiLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODE1NjUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.QKybdVM-1cQBNYeVzYvoQY8rc2ZdRAeq8dJQqbd0zagkmz8X9eoVoKvLxI-cO09bbpRAGMv7Bz-bVcIDgUjIxhxudInmhU2vltfYGEt5meKHjsgKg_qdjyK_WC_bG3N-LhfHUhiA1n3rU0owSxVOWdBxmnYZhftjMd2kGphY-leVPYMoUJRKPteJAMx-F8er1L9nBkrfazoE61Y5GR_y8qtdVFIqlo9oPEGlb1qUC7A4kSGp5OVb4vRvWiqQj7MTjsYIGfqUWQmnkoA7dvlCpbiHdel3Lq6UexS4XzC_FBYC7ekBFU1EO-5rFUflhzmxepPnD8S51eS1CO0ProwwOA";
// jwt= "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ." +
// "eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MDgzMiwiaWF0IjoxNTgyNzgwMjMyLCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ilg0TzJGQnBQNlJHSm5yTTJaX2toYXciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODAyMzIsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0." +
// "fB6Av1KK38U65HbP5XDfNjWyl2i9C9ojHSxAytDKjXHTCaXB2VMHmmnGzEaoSMnS0WR7LilugrmznqOIXkV8i-SyATw-Wx6hWg_9aiBOj-1eeQhUrqZGsWhjklxCFfK0WpAiyNNSAwiklgiZY41P0jrHzNbxk_5WVIxb0sEQ-igLYQhonTeLQ8WuYuCB6iRMlWHxwNdpSNXb-IlzjEKNm1cozf8RRjg0Y00Hu2VPEai2NJzGx5Ro7x7OpvCfePjxlyJze0tSYDVWxBnklBvHGDHXuTqKqMwNNHzo53JIiSARQD7JHxNCgtNTVIYX075zHNn8UgiLZy1mEdf1KnoXHg";
//jwt= "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MDgzMiwiaWF0IjoxNTgyNzgwMjMyLCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ilg0TzJGQnBQNlJHSm5yTTJaX2toYXciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODAyMzIsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.fB6Av1KK38U65HbP5XDfNjWyl2i9C9ojHSxAytDKjXHTCaXB2VMHmmnGzEaoSMnS0WR7LilugrmznqOIXkV8i-SyATw-Wx6hWg_9aiBOj-1eeQhUrqZGsWhjklxCFfK0WpAiyNNSAwiklgiZY41P0jrHzNbxk_5WVIxb0sEQ-igLYQhonTeLQ8WuYuCB6iRMlWHxwNdpSNXb-IlzjEKNm1cozf8RRjg0Y00Hu2VPEai2NJzGx5Ro7x7OpvCfePjxlyJze0tSYDVWxBnklBvHGDHXuTqKqMwNNHzo53JIiSARQD7JHxNCgtNTVIYX075zHNn8UgiLZy1mEdf1KnoXHg"; jwt = "eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ." +
"eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjg3MTkwNSwiaWF0IjoxNTgyODcxMzA1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6IkliX3VSOWdnZEdVRi1jbzZWZGdfTHciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI4NzEzMDUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0."+
"Mek6XzKKUenVQU3IHmLM_tgtilCbsIUSFu1r2gIHsNqseVZYC6JpkQJEZ2SSIwjRPSNUqtK6wqG4s5QbY9qJfIVdVMPqI95eaJiPWKOM6RTlatEhyLs4mokgSutsFHF97nW1qXGidN4tfXaxYygfaoYvOvjeGM-sfUixUbu3fhc5PKH2N91LnVcJNDmqDiUamzOYIXDzn55us8bjCm02fHOQ9D12HY9ambZ_zmPJXAMRi_YoqnSGAhggLfqKJ32pcB2ATHumgDOEhRsuXM89M6pHRS-yzaTfV182prd-fYWdscPVMiEqDt8JXb811lzY8wfqYZxtyg1sEdkq0Hrugw";
// 向苹果后台获取公钥参数 // 向苹果后台获取公钥参数
String appleResp = null; String appleResp = null;
...@@ -706,12 +729,17 @@ public class LoginServiceImpl implements LoginService { ...@@ -706,12 +729,17 @@ public class LoginServiceImpl implements LoginService {
JSONObject jsonObject = JSONObject.parseObject(appleResp); JSONObject jsonObject = JSONObject.parseObject(appleResp);
String keys = jsonObject.getString("keys"); String keys = jsonObject.getString("keys");
JSONArray arr = JSONObject.parseArray(keys); JSONArray arr = JSONObject.parseArray(keys);
JSONObject jsonObject1 = JSONObject.parseObject(arr.getString(0)); // JSONObject jsonObject1 = JSONObject.parseObject(arr.getString(0));
JSONObject jsonObject1 = JSONObject.parseObject(arr.getString(1));
System.out.println("jsonObject1:"+jsonObject1); System.out.println("jsonObject1:"+jsonObject1);
Jwk jwa = Jwk.fromValues(jsonObject1); Jwk jwa = Jwk.fromValues(jsonObject1);
PublicKey publicKey = jwa.getPublicKey(); PublicKey publicKey = jwa.getPublicKey();
//added by joy begin
// publicKey = getPublicKey();
//added by joy end
String audience= "com.yunqueyi.Doctor"; String audience= "com.yunqueyi.Doctor";
String subject= "001130.2b871465fd1f45ffaf5dc287e489eef1.0315"; String subject= "001130.2b871465fd1f45ffaf5dc287e489eef1.0315";
JwtParser jwtParser = Jwts.parser().setSigningKey(publicKey); JwtParser jwtParser = Jwts.parser().setSigningKey(publicKey);
...@@ -729,7 +757,7 @@ public class LoginServiceImpl implements LoginService { ...@@ -729,7 +757,7 @@ public class LoginServiceImpl implements LoginService {
} }
} catch (ExpiredJwtException e) { } catch (ExpiredJwtException e) {
System.out.println("checkIdentifyToken-apple token expired" + e.getMessage()); System.out.println("checkIdentifyToken-apple token expired" + e.getMessage());
throw new PicaException("apple token expired Exception", e.getMessage()); throw new PicaException("apple token expired Exception {}", e.getMessage());
} catch (Exception e) { } catch (Exception e) {
System.out.println("checkIdentifyToken-apple token illegal" + e.getMessage()); System.out.println("checkIdentifyToken-apple token illegal" + e.getMessage());
throw new PicaException("apple token illegal Exception", e.getMessage()); throw new PicaException("apple token illegal Exception", e.getMessage());
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册